PostgreSQL indeksleri, veritabanı performansını artırmanın temel araçlarından biridir. Bu makale, indekslerin sadece hız artırıcı olmanın ötesinde, birincil anahtarlar, benzersiz anahtarlar ve dışlama gibi kısıtlamaları uygulamak için de kullanılabileceğini vurguluyor. İndeksler, diskten okunan veri miktarını azaltarak sorgu hızını artırır, ancak bu fayda ancak sorgunun indekslenen sütunlar ve veri tipleriyle eşleşmesi durumunda ortaya çıkar. Genel bir kural olarak, bir sorgu tablonun %15-20'sinden daha azını döndürüyorsa indeksler faydalı olur; aksi takdirde PostgreSQL'in sorgu planlayıcısı sıralı taramayı (sequential scan) tercih edebilir. Bu nedenle, büyük oranda veri döndüren sorgular için indeks eklemek yerine sorguyu yeniden yapılandırmak veya özet tablolar kullanmak daha etkili olabilir.
PostgreSQL, varsayılan olarak altı farklı indeks türü sunar ve uzantılar aracılığıyla daha fazlasına erişilebilir. Bu indeksler genellikle bir anahtar değeri ile tablodaki ilgili satırların disk üzerindeki konumunu (TID veya tuple id olarak bilinen) ilişkilendirerek çalışır. Veritabanının verileri diskte nasıl depoladığını anlamak, indekslerin işleyişini kavramak için kritik öneme sahiptir. Her tablo, boyutuna bağlı olarak bir veya daha fazla dosyadan oluşan bir "heap" yapısına sahiptir ve bu heap'ler 8KB'lık sayfalara bölünmüştür. Tablo satırları, yani "tuple"lar, bu dosyalarda belirli bir sıra olmaksızın saklanır. İndeks ise, indeks sütunlarını heap içindeki satır konumlandırıcılarına (ctid) bağlayan bir ağaç yapısı olarak görev yapar. Makale, bu heap dosyalarının diskte nasıl bulunabileceğine dair pratik örnekler de sunmaktadır.
PostgreSQL indekslerinin iç işleyişini ve performans üzerindeki etkilerini anlamak, veritabanı uygulamalarını optimize etmek için kritik öneme sahiptir.