Bir indeks, veri erişimini hızlandırır. İndeks olmadan, veritabanı eşleşen kayıtları bulmak için her satırı tarar. İndeks ile doğrudan ilgili satırlara atlar. İndeks, değerleri konumlara eşleyen ayrı bir veri yapısıdır. Bir kitap indeksi de aynı şekilde çalışır. Bir terim ararsınız ve sayfa numarasını bulursunuz. Bunu bulmak için her sayfayı okumazsınız. Veritabanı da aynı şeyi yapar.
İndekslerin bir maliyeti vardır. Yer kaplarlar. İndeksin de güncellenmesi gerektiğinden ekleme, güncelleme ve silme işlemlerini yavaşlatırlar. Her yazma işlemi daha pahalı hale gelir. Faydası ise daha hızlı okuma işlemleridir. Okuma ağırlıklı iş yükleri için indeksler şarttır. Yazma ağırlıklı iş yükleri için ise çok fazla indeks performansı olumsuz etkiler. Hangi sütunların indeksleneceğini seçmek, sorgu kalıplarını anlamayı gerektirir. WHERE yan tümcelerinde, JOIN koşullarında ve ORDER BY yan tümcelerinde kullanılan sütunlar iyi adaylardır. Boolean bayrağı gibi düşük kardinaliteli sütunlar ise kötü adaylardır çünkü indeks aramayı çok fazla daraltmaz. Bileşik indeksler birden fazla sütunu kapsar ve birden fazla alanda filtreleme yapan sorgulara hizmet edebilir. Bileşik indeksteki sütunların sırası önemlidir. Veritabanı, önde gelen sütun üzerindeki sorgular için bileşik indeks kullanabilir, ancak yalnızca sondaki sütunlar için kullanamaz. İndeks tasarımı bir denge meselesidir. Amaç, yazma işlemlerini gereğinden fazla yavaşlatmadan önemli sorguları hızlandırmaktır.
Dizin türleri
- B-ağacı — çoğu veritabanı için varsayılan, aralık sorguları için iyi
- Hash — hızlı eşitlik aramaları, aralık desteği yok
- Bitmap — düşük kardinaliteli sütunlar, analitik sorgular
- Tam metin — metin araması
- Bileşik — tek bir dizinde birden fazla sütun
İndeks bir kısayoldur. Yazma hızı ve depolama alanından ödün vererek okuma hızını artırır. Okuma işlemlerinin en önemli olduğu yerlerde kullanın.
Comments (3)
Leave a comment