PostgreSQL'de hangi tür indeksler vardır?
sobes.tech yapay zeka
AI'dan gelen yanıt
Aşağıdaki temel indeks türleri mevcuttur:
-
B-tree (B-ağacı) - en yaygın türdür, çoğu tipik sorgu için uygundur (eşitlik, karşılaştırma, aralık). Dengeli ağaç tabanlıdır.
-
Hash (Hash) - eşitlik (=) kontrolü için kullanılır. Bu tür, bu sorgular için B-tree’den daha hızlıdır, ancak karşılaştırma ve aralıkları desteklemez. Anahtarın hash değerini ve satıra işaretçiyi depolar.
-
GiST (Genelleştirilmiş Arama Ağacı) - karmaşık veri türleri için farklı indeksler oluşturmayı sağlayan genelleştirilmiş arama ağacı yapısıdır (geometrik, tam metin araması ile). Dengeli ağaç tabanlıdır.
-
SP-GiST (Uzay Bölümlü Genelleştirilmiş Arama Ağacı) - uzayda bölünebilen veriler için özel GiST versiyonudur (örneğin, noktalar, dikdörtgenler). Örnekler: k-d ağaçları, quadtrees.
-
GIN (Genelleştirilmiş Ters İndeks) - genelleştirilmiş ters indeks, özellikle diziler, JSONB gibi bileşenli değerler içindeki öğeleri aramak için kullanılır. Tam metin araması için sıkça tercih edilir.
-
BRIN (Blok Aralığı İndeksi) - blok aralığı indeksi. Doğal olarak sıralanmış büyük tablolar için uygundur (örneğin, zaman bazlı). Fiziksel disk bloklarındaki değer aralığını indeksler.
-
Bloom (Bloom filtresi) - geleneksel olmayan, olasılıksal bir veri yapısıdır ve bir öğenin olmama durumunu hızlıca kontrol eder. Çok büyük tablolardan seçimleri hızlandırmak veya tam eşleşme gerekmediğinde veya ana indeks taramasından önce ek bir filtre olarak kullanılır.
Kullanım örnekleri:
- B-tree: sayısal alanlar, tarihler, dizgeler üzerinde arama yapmak için aralık indeksleri (
WHERE amount > 100). - Hash: doğrudan kullanılmaz, çünkü B-tree çoğu durumda daha hızlıdır.
- GiST: coğrafi indeksler (
gist(location)), tam metin araması indeksleri (to_tsvector). - SP-GiST: iki boyutlu veriler için indeksler (
spgist(point)). - GIN: diziler (
gin(tags)), JSONB (gin(data)), tam metin araması. - BRIN: log tablolarında
timestampalanı üzerinde indeks, veriler zamanla sıralanmıştır. - Bloom: sütun kümesi üzerinde indeks (
bloom(col1, col2, col3)) ve değer kombinasyonlarının bulunmadığını hızlıca belirlemek için.
İndeks türünün seçimi, sütunun veri türüne ve optimize edilmek istenen sorgu türüne bağlıdır.