Sobes.tech
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: SELECT işlemlerinin hızını artırma, özellikle WHERE, JOIN ve ORDER BY koşullarıyla. Dizin, SGBD'nin ihtiyaç duyulan satırları daha hızlı bulmasını sağlar, tüm tabloyu taramadan.
  • Sıralama: ORDER BY ile 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 JOIN iş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 JOIN iş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).
  • JOIN koş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.
  • WHERE koşulundaki fonksiyonlar ile kullanılan sütunlar: Eğer WHERE içinde sütona fonksiyon uygulanıyorsa (örneğin, WHERE YEAR(date_column) = 2023), normal indeks date_column kullanılmaz. Fonksiyonel indeksler gerekebilir (destekleniyorsa) veya sorgu yeniden yazılmalıdır.