Junior
Veritabanlarında indeksler hangi durumlarda kullanılır?
sobes.tech yapay zeka
AI'dan gelen yanıt
Veritabanı dizinleri, sorgu performansını optimize etmek için kullanılır, özellikle:
- Veri arama:
SELECTişlemlerinin hızını artırma, özellikleWHERE,JOINveORDER BYkoşullarıyla. Dizin, SGBD'nin ihtiyaç duyulan satırları daha hızlı bulmasını sağlar, tüm tabloyu taramadan. - Sıralama:
ORDER BYile sıralamayı hızlandırma. Sıralama sütunları indeksliyse, SGBD bu sıralamayı kullanabilir ve ek sıralama işlemlerinden kaçınabilir. - Tablo birleştirme: İndekslenmiş sütunlar üzerinde
JOINişlemlerini hızlandırma. Dizin, ilişkili tablolardaki uygun satırları hızlıca bulmaya yardımcı olur. - Veri benzersizliği: Bir sütundaki değerlerin benzersizliğinin garantisi (benzersiz indeks aracılığıyla).
- Birincil anahtarlar: Varsayılan olarak birincil anahtar, benzersiz bir indeks olup, benzersiz kimlik ile satıra hızlı erişim sağlar.
- İkincil anahtarlar: Referans bütünlüğünü sağlamak ve ilişkili tablolar arasındaki
JOINişlemlerini hızlandırmak için kullanılır.
İndeksleme için sütun örnekleri:
- Sık sık arama yapılan sütunlar (
WHERE uid = 123). JOINkoşullarında kullanılan sütunlar (table1.id = table2.ref_id).- Sık sık sıralama yapılan sütunlar (
ORDER BY created_at DESC). - Yüksek kardinaliteye sahip sütunlar (birçok benzersiz değer).
İndekslerin etkisiz veya gereksiz olabileceği durumlar:
- Çok küçük tablolar: Küçük tablolarda tarama, indeksli aramadan daha hızlı veya ona eşit olabilir.
- Düşük kardinaliteye sahip sütunlar: Az sayıda benzersiz değere sahip sütunlarda (örneğin, boolean alan TRUE/FALSE) indeks, anlamlı bir hızlandırma sağlamayabilir.
- Sık yazma işlemleri (INSERT, UPDATE, DELETE): İndeksler, veri değişikliklerinde güncellenmelidir, bu da yazma işlemlerini yavaşlatabilir. Tüm sütunları rastgele indekslemek önerilmez.
WHEREkoşulundaki fonksiyonlar ile kullanılan sütunlar: EğerWHEREiçinde sütona fonksiyon uygulanıyorsa (örneğin,WHERE YEAR(date_column) = 2023), normal indeksdate_columnkullanılmaz. Fonksiyonel indeksler gerekebilir (destekleniyorsa) veya sorgu yeniden yazılmalıdır.