MySQL index ne olaki?

Dağınık Oda

Küçükten beridir evde biraz dağınık birisiyimdir. Eşyalar pek dolapta durmaz. Aslında bunun için baya gayret ederim. Bugünden sonra toplu olacağım derim, eşyaları düzene koyarım ama malesef bir süre sonra hepsi nöbet yerlerini terkederler. Zamanımın ciddi bir kısmını bulmak için harcarım.

Nedense bu dağınıklığım yazılım hayatıma hiç yansımadı. Belkide iş harici dünyamdaki açığı bu şekilde kapatıyorum.

Yazılımdaki dağınıklık aynen gerçek hayatta olduğu gibi sürecin yavaşlamasına sebeb olur. Özellikle PHP ve MySQL ile yazılım geliştiriyorsanız ekstrem durumlar hariç asıl performans sağlayacağınız kısım database tarafıdır. O nedenle database yapınızın düzgün, indexlerinizin yerinde olması gerekir.

Peki nedir bu index?

İndex aynen aynen bir kitapta aradığınız kolayca bulmanızı sağlayan fihristtir. İndex tek başına bir olgu değildir. Bilgisayarın veri saklama yapısı ile doğrudan alakalıdır. O nedenle o konuda yazdığım yazımı okumanızı tavsiye ediyorum.

1. Data storage hakkındaki yazım için buradan devam edin.

2. Alıcı değilseniz dükkanın önünü kapatmayın. :)

 

1 numarayı tercih edenler için devam ediyorum :)

Veritabanı sunucusu (database server) bir sorgudan istek aldığında bu sorguyu mantıklı parçalara ayırır.  Data sıralama (sorting) ve data birleştirme ( joining ) fonksiyonlarının oluşturduğu düzenli talimatlar zincirinden oluşan algoritmalar ile sorgunun sonucu sunulur.

Bazı sorgular anahtardan değer bulma gibi basit bir sogu iken, bazıları birden çok tablonun ortak alanlarından sonuç çekmek gibi karmaşıktır. Veritabanı sunucusu mümkün olduğunca verimli sonuç dönmeye çalışır. Verimlilik ise kullanılan algoritmanın ne kadar fonksiyon ile bunu başarabildiği ile alakalıdır. Bu durum algoritmanın hesaplama karmaşıklığı (computation complexity) olarak bilinir.

Search, sort, join ve access için farklı algoritmalar kullanılır.  En verimliden en verimsize doğru belli başlı algoritmalar şöyledir :

  • O (1):  Sabit Sıralama
  • O ( log n): Logaritmik Sıralama
  • O (n): Logaritmik Sıralama
  • O (nX): Polinominal Sıramala
  • O (xn): Exponansiyel  Sıralama

Hesaplama karmaşıklığı terminolojisine göre her bir O terimi yanındaki fonksiyon verilen operasyon tipi için ne kadar data elementi kullanıcağını belirtir. Tabi bu değer en kötü senayoya göredir.  Bilgisayar biliminde maksimuma göre düşünülür. Algoritmadan daha az işlemle sonuç dönebilir.

O (1)  Order :

Bu algoritmada sonuç sabit sayıda işlemden sonra döndürülür. Tabloda 100,000 veya 1,000,000 kayıt olması işlem sayısını etkilemez. Elbette her sorgu için faklı zamanda sonuç dönebilmesi ihtimali mevcuttur.  En verimli algoritmadır.

O (n) Order :

Bu algoritmada sonuç tablodaki kayıt sayısı ile doğru orantılı olarak artar. Datanın tümünün sıralı olarak okunması gerektiği durumlarda kullanılır.

O (log n) Order :

Sabit ve lineer arasında bir verime sahip algoritmadır. Yaygın ikili arama işlemlerinde kullanılır. Aranacak data iki parçaya bölünür. Aranan verinin bulunmadığı parça elenerek, diğer parça tekrar bölünür. Bu şekilde bölünerek sonuca ulaşılır.

O (nX) ve O (xn) Order :

Bu iki algoritmada çalışırken ne kadar çok data elemanı varsa o kadar verimsiz olur. Yani index boyutu büyüdükçe verimsizlik artar. Tablo birleştirme gibi karmaşık fonksiyonlarda kullanılan algoritmadır.

 

MySQL index olayının çalışma mantığı temel haliyle bu şekildedir. İlerleyen zamanda MySQL index’in data çağırma üzerindeki etkileri ile alakalı bir yazı yazmayı planlıyorum.

Bir Cevap Yazın

Your email will not be published. Name and Email fields are required.

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>