PostgreSQL'de İndeks Stratejileri: Ne Zaman, Nereye?
Yanlış yerde kurulan indeksler performansı düşürebilir. Sorgu planlarını okuyarak doğru indeks kararları vermeyi anlatıyorum.
PostgreSQL'de İndeks Stratejileri: Ne Zaman, Nereye?
İndeksler sorgu performansını artırabildiği gibi, yazma işlemlerini yavaşlatıp disk alanını gereksiz yere tüketebilir. Doğru indeks stratejisi, veri erişim örüntülerini anlamaktan geçiyor.
EXPLAIN ANALYZE ile Başlamak
Herhangi bir indeks eklemeden önce EXPLAIN ANALYZE ile sorgunun gerçek çalışma planını incelemek gerekir. Seq Scan gören bir sorgu her zaman kötü değildir; küçük tablolarda indeks kullanmak PostgreSQL'in tercih ettiği yol olmayabilir.
B-Tree Dışındaki İndeks Türleri
- GIN: JSONB ve dizi alanlarında arama için
- GiST: Coğrafi veri ve aralık sorguları için
- BRIN: Zaman serisi gibi doğal olarak sıralı büyük tablolarda, çok daha az yer kaplayan bir alternatif
Kısmi İndeksler (Partial Index)
Sorgularınız genellikle WHERE published = true gibi bir koşulla sınırlıysa, tüm tablo yerine yalnızca bu alt kümeyi kapsayan bir kısmi indeks oluşturmak, hem indeks boyutunu küçültür hem de sorgu hızını artırır.
CREATE INDEX idx_posts_published ON "Post" (created_at) WHERE published = true;
Çoklu Sütun İndekslerinde Sıralama Önemli
Bir indeksteki sütun sırası, hangi sorguların bu indeksten faydalanabileceğini belirler. En seçici (en çok farklı değer içeren) sütunu genellikle en başa koymak, en iyi performansı sağlar.
Sonuç
İndeks eklemek "daha hızlı olur" varsayımıyla değil, gerçek sorgu örüntülerini ölçerek yapılmalı. Gereksiz indeksler, INSERT ve UPDATE performansını sessizce düşürebilir.