0Pricing
SQL Academy · Ders

JSONB'yi GIN ile INDEX'leme

JSONB belgeleri üzerinde GIN INDEX'leri oluşturun ve hızlı kapsama sorguları için jsonb_path_ops kullanın.

JSONB'yi GIN ile INDEX'leme, CoddyKit'te ücretsiz bir SQL Academy dersidir. Bu, 4 dersinin 3. 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.

JSONB İçin Neden GIN Kullanılır

JSONB belgelerinde çok sayıda "öğe" bulunur (anahtar/değer çiftleri ve dizi öğeleri). GIN (Genelleştirilmiş Ters Dizin), "belgenin X içerdiği satırlar" sorguları için tasarlanmıştır.

Varsayılan GIN Dizini

Varsayılan işleç sınıfı @>, ?, ?| ve ?& işleçlerini destekler:

CREATE INDEX events_data_gin ON events USING GIN (data);

-- These now use the index:
SELECT * FROM events WHERE data @> '{"type":"login"}';
SELECT * FROM events WHERE data ? 'error';

jsonb_path_ops: Daha Küçük ve Daha Hızlı

İçerme sorgularıyla sınırlı kullanımda boyutunun yarısı kadardır ve daha hızlıdır; ancak ONLY @> işleçini destekler:

CREATE INDEX events_data_gin ON events USING GIN (data jsonb_path_ops);

-- Supports @>
-- Does NOT support ?  ?|  ?&
SELECT * FROM events WHERE data @> '{"type":"login"}';

Yalnızca Bir Yolu Dizinleme

Yalnızca bir anahtarı sorguluyorsanız, çıkarılan değer üzerinde bir ifade B-ağacı dizini daha da hızlıdır:

CREATE INDEX events_user_id_idx
  ON events (((data->>'user_id')::BIGINT));

SELECT * FROM events WHERE (data->>'user_id')::BIGINT = 42;

Dizilerin İçini Dizinleme

Dizi yolu üzerinde bir GIN dizini kullanınız:

CREATE INDEX events_tags_gin
  ON events USING GIN ((data->'tags'));

SELECT * FROM events WHERE data->'tags' @> '["admin"]'::JSONB;

JSONB Dizinini Diğer Filtrelerle Birleştirme

Bileşik koşullar, JSONB bölümü için GIN dizinini ve JSONB dışındaki bölüm için başka bir dizini kullanabilir:

EXPLAIN ANALYZE
SELECT * FROM events
WHERE data @> '{"type":"login"}'
  AND ts >= NOW() - INTERVAL '7 days';
-- BitmapAnd: GIN index on data, B-tree on ts

GIN Yazma Performansı

GIN güncellemeleri B-ağacına göre daha maliyetlidir. Çok yoğun yazılan tablolarda fastupdate seçeneği, VACUUM tarafından temizlenen bekleyen bir listede GIN güncellemelerini toplu hâle getirir.

CREATE INDEX events_data_gin ON events USING GIN (data) WITH (fastupdate = on);

-- Flush manually if needed:
SELECT gin_clean_pending_list('events_data_gin');

Dizin Boyutu

JSONB GIN dizinleri büyük olabilir. Çok büyük tablolar için şunları değerlendirebilirsiniz:

  • Yalnızca belirli yolları dizinlemek (ifade dizini)
  • Yalnızca içerme amacıyla jsonb_path_ops kullanmaya geçmek
  • Yoğun kullanılan alanları gerçek sütunlara ayırmak

Üçlü Dizilerle Birleştirme

JSONB içindeki yaklaşık metin araması için TEXT ifadesine çıkarın ve bir pg_trgm GIN dizini ekleyin:

CREATE INDEX events_message_trgm
  ON events USING GIN ((data->>'message') gin_trgm_ops);

Dizinleme Ne Zaman Yardımcı Olmaz

Filtreniz her satıra dokunuyorsa (seçicilik çok düşükse), planlayıcı dizin olsa bile sıralı taramayı seçebilir. Doğrulamak için EXPLAIN ANALYZE kullanınız.

JSONB Dizinlerinin Bakımı

GIN dizinleri, diğer tüm dizinler gibi şişer. Düzenli olarak REINDEX CONCURRENTLY kullanınız:

REINDEX INDEX CONCURRENTLY events_data_gin;

Özet

GIN, JSONB filtrelerini milisaniyelik aramalara dönüştürür.

  • Varsayılan GIN: @>, ?, ?|, ?&
  • jsonb_path_ops: daha küçük, yalnızca içerme
  • Çıkarılan skaler değer üzerinde ifade B-ağacı: tek anahtar için en hızlı seçenek

Hızlı Kontrol

Bir JSONB sütununda yalnızca data @> ... sorgusunu kullanıyorsunuz. Tüm özellik desteğiyle en küçük boyutu hangi dizin sağlar?

Sıkça Sorulan Sorular

“JSONB'yi GIN ile INDEX'leme” dersi ücretsiz mi?

Evet — “JSONB'yi GIN ile INDEX'leme” 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.

“JSONB'yi GIN ile INDEX'leme” dersinde ne öğreneceğim?

JSONB belgeleri üzerinde GIN INDEX'leri oluşturun ve hızlı kapsama sorguları için jsonb_path_ops kullanın. 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 3. dersidir.

“JSONB'yi GIN ile INDEX'leme” 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

  1. JSONB ve JSON: Hangisi Ne Zaman Kullanılmalı
  2. Yol İşleçleri: -> ->> @>
  3. JSONB'yi GIN ile INDEX'leme
  4. Modelleme: JSONB Normalleştirmeyi Ne Zaman Geride Bırakır
← SQL Academy Sayfasına Dön