PostgreSQL'de index (dizin), veritabanının kitap indeksi gibi aramayı hızlandırır — ama her yazma işlemini de yavaşlatır. EXPLAIN ANALYZE (sorgunun nasıl çalıştığını gösteren komut) olmadan index eklemek borç almaktır; bir sonraki sprintte yazma yükünü hissedersin.
Sık gördüğüm hatalar: her yabancı anahtara (FK) aynı index, her JSON alanına GIN index, kısmi index'i "gereksiz" sanmak. Oysa çoğu liste sorgusu zaten WHERE status = 'active' ile filtreli; kısmi index tam burada işe yarar.
Karar akışı basit tutulabilir: eşitlik filtresi → B-tree, metin arama veya JSON içinde arama → GIN, zaman serisi ve log tabloları → BRIN. Yavaş bir e-ticaret sipariş listesi sorgusu düşün:
SELECT * FROM orders WHERE tenant_id = $1 AND status = 'open' ORDER BY created_at DESC LIMIT 20;
(tenant_id, status, created_at DESC) birleşik kısmi index — sadece WHERE status = 'open' satırları için — genel FK index'inden çoğu zaman daha iyi performans verir.
Testi gerçek veri hacminde, soğuk önbellek ve eşzamanlı yazma ile yapmak önemli. PostgreSQL'in sorgu planlayıcısı konuşur; sunum slaytları değil.
Özet: Index eklemeden önce EXPLAIN ANALYZE çalıştır. Sorgunun filtresine uygun index türünü seç.
