0Pricing
SQL Academy · Ders

Kısmi ve İfade INDEX'leri

WHERE koşullarıyla yalnızca ilgilendiğiniz satırları INDEX'leyin ve hesaplanan ifadeleri INDEX'leyin (lower(email), date_trunc('day', ts)).

Kısmi ve İfade INDEX'leri, 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.

Kısmi Dizin: Bir Alt Kümesi Dizinleme

Kısmi dizin, yalnızca dizin oluşturulurken bir WHERE koşuluyla eşleşen satırları kapsar. Daha küçük, daha hızlıdır ve yaygın durumdaki sorgu için mükemmeldir:

CREATE INDEX users_active_email_idx
  ON users(email)
  WHERE deleted_at IS NULL;

Kısmi Dizinler Ne Zaman Avantajlıdır

Şu durumlarda kullanınız:

  • Her zaman aynı koşula göre filtreleme yapıyorsanız (ör. mantıksal silme)
  • Bir değer sütuna hâkimse (ör. satırların %95'inde status='closed' olması)
  • Önbellekte tutulan küçük ve sık kullanılan bir dizin istiyorsanız

Örnek: Etkin Oturumlar

Oturumların çoğu süresi dolmuş durumdadır; yalnızca etkin olanlar sorgulanır:

CREATE INDEX sessions_active_idx ON sessions(user_id)
  WHERE expires_at > NOW();
-- Caveat: planner can't use NOW() in the index predicate — use a fixed timestamp
-- and reindex periodically, OR use a boolean column.

Daha İyi Yaklaşım: Kararlı Bir Koşul Kullanma

Dizin koşulu IMMUTABLE olmalıdır. Zamana bağlı ifadeler (NOW()) uygun değildir. Bunun yerine is_active gibi bir sütun kullanınız:

CREATE INDEX sessions_active_idx ON sessions(user_id)
  WHERE is_active = true;

-- The query must use the same predicate to match the index:
SELECT * FROM sessions WHERE is_active = true AND user_id = 42;

İfade Dizini

Bir sütun üzerindeki işlevi dizinleyiniz:

CREATE INDEX users_email_lower_idx ON users(LOWER(email));

SELECT * FROM users WHERE LOWER(email) = LOWER('Alice@Example.com');
-- Uses the expression index.

Yaygın İfade Dizinleri

  • LOWER(email) büyük-küçük harfe duyarsız arama için
  • (price * tax_rate) hesaplanmış sıralama için
  • date_trunc('day', created_at) günlük raporlar için
  • (data ->> 'user_id')::BIGINT JSONB çıkarımları için

İfade IMMUTABLE Olmalıdır

İfade IMMUTABLE olarak işaretlenmelidir; sonucu yalnızca girdiye bağlı olmalıdır. RANDOM(), NOW() ve CURRENT_USER uygun değildir.

Kısmi ve İfade Dizinlerinin Birlikte Kullanımı

İkisi birlikte kullanılabilir:

CREATE INDEX articles_active_title_idx
  ON articles(LOWER(title))
  WHERE published_at IS NOT NULL;

Benzersiz Kısmi Dizinler

Klasik "bir etkin satır" kalıbı:

CREATE UNIQUE INDEX users_one_active_email
  ON users(email)
  WHERE deleted_at IS NULL;

-- Same email can exist many times in deleted users, but only once active.

Dizin Koşulu Sorguyla Eşleşmelidir

Planlayıcı, kısmi dizini yalnızca sorgunun WHERE koşulu dizin koşulunu gerektirdiğinde kullanır:

-- Index:  WHERE is_active = true
-- Match:  WHERE is_active = true AND user_id = 42       ✓
-- Match:  WHERE is_active AND user_id = 42             ✓
-- No:     WHERE user_id = 42                           ✗
-- No:     WHERE is_active IS NOT FALSE                 ✗ (logically same but planner may not realise)

Aşırı Kullanmayınız

Birbirinden ayrık alt kümeleri kapsayan çok sayıda kısmi dizin yazma işlemlerini yavaşlatabilir (her INSERT, ilgili tüm dizinleri güncellemelidir). Bunları yoğun kullanılan sorgular için ölçülü biçimde kullanınız.

Özet

Kısmi ve ifade dizinleri, her bayttan daha fazla fayda sağlar.

  • Kısmi: yalnızca sorguladığınız alt kümeyi dizinler
  • İfade: hesaplanmış değerleri dizinler
  • Her ikisi de IMMUTABLE koşullar gerektirir
  • Eşleşme için sorgu aynı koşulu kullanmalıdır

Hızlı Kontrol

E-posta adresine göre büyük-küçük harfe duyarsız aramalar yapmak istiyorsunuz. Hangi dizin en verimlidir?

Sıkça Sorulan Sorular

“Kısmi ve İfade INDEX'leri” dersi ücretsiz mi?

Evet — “Kısmi ve İfade 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.

“Kısmi ve İfade INDEX'leri” dersinde ne öğreneceğim?

WHERE koşullarıyla yalnızca ilgilendiğiniz satırları INDEX'leyin ve hesaplanan ifadeleri INDEX'leyin (lower(email), date_trunc('day', ts)). 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.

“Kısmi ve İfade 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

  1. B-ağacı ve Hash ve GiST ve GIN INDEX'leri
  2. Bileşik INDEX'ler ve Sütun Sırası
  3. Kısmi ve İfade INDEX'leri
  4. INDEX Bakımı ve Şişkinlik
← SQL Academy Sayfasına Dön