MySQL index ne yapar?

Gültepe TrafiğiIndex ‘siz bir MySQL Levent yönünden  Kağıthane – Gültepe içerisine doğru giden yola benzer. Yol vardır, araç vardır, gidilecek yol bellidir ama bir şekilde gidilmez. 2 km yolu iki saatte gidersiniz.  Eğer Gültepe yolunda 3 – 5 araba varsa sorun yoktur. Rahatça ilerleyebilirsiniz ama araba sayısı arttıkça işkenceye dönecektir.

Eğer ki yolu açıp, gidilecek yolu düzgün tanımlarsanız hiç bir sorun kalmayacak, yol dünyanın diğer bir çok yolu gibi gidilebilir yol halini alacaktır.

MySQL içinde durum aynen budur. Tabloda kayıt sayısı azken index’in yokluğu pek hissedilmez, kayıt sayısı arttıkça ise index ‘siz bir MySQL tablosundan sonuç almak imkansız hale gelecektir.

Peki ne yapar bu index?

Bunu bir örnekle açıklamak daha doğru olur sanırım. Elimizde ‘personel’ isimli bir tablonun olduğunu düşünelim:

 

ID isim cinsiyet dogumYili iseGirisTarihi Departman
0 Hasan Gülşen Erkek 1984 07/06/2011 Yazılım
1 Mustafa Kartal Erkek 1986 07/05/2011 Yazılım
2 Esin Topçu Kadın 1983 06/27/2011 Analiz
3 Hakan Dertli Erkek 1980 06/16/2011 Analiz
4 Neşe Soysal Kadın 1982 06/13/2011 Yazılım
5 Gözde Gündeş Kadın 1986 05/27/2011 Analiz
6 Utku Gayretli Erkek 1979 05/12/2011 Yazılım
7 Fatih Çömlekçi Erkek 1987 05/05/2011 Yazılım
8 Gamze Gül Kadın 1990 05/05/2011 Analiz

 

Index’siz hali ile

SELECT * FROM personel WHERE dogumYili = ’1983′ dediğimiz zaman bütün tablo ram’e aktarılır ve ram üzerinde bütün kayıtlar tek tek taranarak doğum yılı 1983 ‘ e eşit olan personel dizisi oluşturulur.

Eğer tablomuzda doğum yılı ile ilgili bir index’imiz olsaydı. Ram’e sadece sıralanmış bu index aktarılacaktı

 

ID dogumYili
6 1979
3 1980
4 1982
2 1983
0 1984
5 1986
1 1986
7 1987
8 1990

 

Elimizde en küçüğü 1979 olan ve en büyüğü 1990 olan dokuz adet kayıt vat. İkili arama binary search metoduna göre kayıtlar ortadan ikiye bölünür.

0 numaralı kayıt olan 1984 ile 1983 karşılaştırlır. Daha büyük olduğu için daha küçük kayıtların olduğu ilk bölüm tekrar ikeye bölünür. 4 numaralı kayıt olan 1982 ile kıyalarınır. Daha küçük olduğunda geri kalan tek kayıt 1983 ile kıyaslanır ve sonuç dizisine yazdırılır. Son adım olarak dizi içerisindeki id’ler için tablodan bilgiler çekilir.

Bu yöntemle index’siz halde 8 adımda gerçekleştirilen arama işlemi 4 adımda bitmiş olur. Daha büyük tablolarda ve daha şanslı durumlarda aradaki adım sayısı farklı daha da açılabilir.

Index en basit haliyle bu işi yapar. Konu derindir. Sığ bırakalım, boğulmayalım. Daha sonra botla açılırız.

 

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>