B-ağacı ve Hash ve GiST ve GIN INDEX'leri
PostgreSQL'deki başlıca INDEX türlerini karşılaştırın ve eşitlik, aralık, geometri, JSON ve tam metin sorguları için doğru olanı seçin.
B-ağacı ve Hash ve GiST ve GIN INDEX'leri, CoddyKit'te ücretsiz bir SQL Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, SQL Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. SQL Academy kursu toplamda 4 dersten oluşur.
Dizin Türlerine Genel Bakış
PostgreSQL'de, her biri farklı erişim biçimleri için en iyi duruma getirilmiş çeşitli dizin türleri vardır:
- B-ağacı — eşitlik ve aralık (varsayılan)
- Karma — yalnızca eşitlik
- GiST — geometrik, tam metin, özel
- GIN — bileşik (diziler, JSONB, tam metin)
- BRIN — blok aralığı — devasa, sıralanmış tablolar
- SP-GiST — uzay bölümlü ağaçlar
B-ağacı: Varsayılan
Zamanın %95'inde kullanılır. =, <, <=, >, >=, BETWEEN, ORDER BY işleçlerini destekler:
CREATE INDEX users_email_idx ON users(email);
CREATE INDEX orders_created_at_idx ON orders(created_at DESC);Karma Dizin
Yalnızca eşitlik aramaları. PG 10'dan beri çökme güvenlidir. Salt eşitlik için B-ağacından daha küçük ve biraz daha hızlıdır, ancak kullanım alanı çok dardır:
CREATE INDEX sessions_token_hash ON sessions USING HASH (token);
-- Useful for very high-cardinality equality lookups; usually B-tree is fine.GiST Dizini
Genelleştirilmiş Arama Ağacı; eklenebilir yapıdadır ve aralık türlerini, geometrik türleri, IP adreslerini ve tam metni destekler:
CREATE INDEX events_during_idx ON events USING GIST (during);
-- 'during' is a tstzrange — finds overlapping ranges efficiently.
CREATE INDEX places_location_idx ON places USING GIST (location);
-- PostGIS geometry — nearest neighbour, intersects.GIN Dizini
Genelleştirilmiş Ters Dizin; her öğenin birçok satıra karşılık geldiği bileşik değerler için en iyisidir:
CREATE INDEX articles_tags_gin ON articles USING GIN (tags);
-- tags is TEXT[]; query with @> or && operators
CREATE INDEX articles_doc_gin ON articles USING GIN (search_doc);
-- For tsvector full-text search
CREATE INDEX events_data_gin ON events USING GIN (data jsonb_path_ops);
-- For JSONB containment queriesBRIN Dizini
Blok Aralığı Dizinleri, her N sayfadaki değer aralıklarını özetler. Çok küçüktür (terabaytlık tablolar için kilobaytlar düzeyinde), ancak yalnızca veriler dizinlenen sütuna göre fiziksel olarak sıralanmışsa etkilidir:
CREATE INDEX events_ts_brin ON events USING BRIN (ts);
-- Excellent for append-only time-series tables.Boyutları Karşılaştırma
Bir milyar satırlık tablo için:
- BIGINT üzerinde B-ağacı: ~30 GB
- TIMESTAMPTZ üzerinde BRIN: ~1 MB
BRIN çok daha küçüktür, ancak B-ağacını yalnızca sıralı / sıralanmış sorgularda geçer.
Dizin Türü Seçme
Karar akışı:
- Skaler değerlerde eşitlik + aralık → B-ağacı
- Çok büyük skaler kümede eşitlik → B-ağacı (Hash'i yalnızca ölçüm yaptıysanız kullanın)
- Diziler / JSONB / tam metin → GIN
- Aralık türleri, geometri, yaklaşık metin → GiST
- Devasa sıralanmış tablo, yalnızca ekleme → BRIN
GIN Tercihleri
GIN, "X içeren tüm satırları bul" sorguları için en hızlısıdır, ancak INSERT/UPDATE işlemlerinde B-ağacından daha yavaştır. Yazma işlemlerinin çok yoğun olduğu tablolarda GIN'in bekleyen listesini denetlemek için fastupdate=off seçeneğini değerlendirin.
İşleç Sınıfları
Her dizin türü belirli işleçlerle çalışır. JSONB, yalnızca kapsama yönelik daha küçük ve hızlı dizinler için jsonb_path_ops kullanır:
CREATE INDEX e_data_gin ON events USING GIN (data jsonb_path_ops);
-- Half the size of default jsonb_ops, supports @> only.Türlere Göre Bileşik Dizinler
B-ağacı bileşik dizinleri en soldaki önek eşleşmesini kullanır. GIN bileşik dizinleri çalışır ancak daha büyüktür; genellikle ayrı tek sütunlu GIN dizinleri oluşturursunuz.
Özet
Sorguya uygun dizin türünü seçin.
- B-ağacı: varsayılan
- GIN: diziler/JSONB/tam metin
- GiST: aralıklar/geometri/yaklaşık metin
- BRIN: sıralı/yalnızca eklemeli
Hızlı Kontrol
"İçerir" sorguları için bir TEXT[] sütununa dizin ekliyorsunuz. Hangi dizin türü uygundur?
Sıkça Sorulan Sorular
“B-ağacı ve Hash ve GiST ve GIN INDEX'leri” dersi ücretsiz mi?
Evet — “B-ağacı ve Hash ve GiST ve GIN INDEX'leri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve SQL Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. SQL Academy kursu toplamda 4 dersten oluşur.
“B-ağacı ve Hash ve GiST ve GIN INDEX'leri” dersinde ne öğreneceğim?
PostgreSQL'deki başlıca INDEX türlerini karşılaştırın ve eşitlik, aralık, geometri, JSON ve tam metin sorguları için doğru olanı seçin. SQL Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
SQL Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te SQL Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“B-ağacı ve Hash ve GiST ve GIN INDEX'leri” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu SQL Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her SQL Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- B-ağacı ve Hash ve GiST ve GIN INDEX'leri
- Bileşik INDEX'ler ve Sütun Sırası
- Kısmi ve İfade INDEX'leri
- INDEX Bakımı ve Şişkinlik