Sıralı Taramalar ve INDEX Taramaları
Sıralı taramanın ne zaman yeterli olduğunu, ne zaman INDEX taraması gerektiğini ve planlayıcının buna nasıl karar verdiğini öğrenin.
Sıralı Taramalar ve INDEX Taramaları, CoddyKit'te ücretsiz bir SQL Academy dersidir. Bu, 4 dersinin 2. 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.
Satırları Bulmanın İki Yolu
Veritabanının satırları okumak için iki temel stratejisi vardır:
- Sıralı Tarama — tablonun her sayfasını okur
- Dizin Taraması — bir dizinde ilerleyip eşleşen satırları getirir
Sıralı Tarama Ne Zaman Doğrudur
Zaten tablonun çoğuna ihtiyacınız varsa tarama, dizini okuyup eşleşen her satırı getirmekten daha ucuzdur. Kabaca: satırların yaklaşık %10–20'sinden fazlası → sıralı tarama kazanır.
Dizin Taraması Ne Zaman Kazanır
Seçici sorgularda (satırların küçük bir bölümünde) dizin avantaj sağlar:
EXPLAIN SELECT * FROM users WHERE id = 42;
-- Index Scan using users_pkey (cost=0.43..8.45 rows=1)
EXPLAIN SELECT * FROM users WHERE active;
-- Seq Scan on users (cost=0.00..15000.00 rows=950000)
-- (because most users are active)Dizin Taraması ve Yalnızca Dizin Taraması
Bazen ihtiyacınız olan tüm sütunlar yalnızca dizinde bulunur; tabloyu getirmek gerekmez. Buna Yalnızca Dizin Taraması denir:
CREATE INDEX users_email_id_idx ON users(id) INCLUDE (email);
EXPLAIN SELECT email FROM users WHERE id = 42;
-- Index Only Scan using users_email_id_idxBit Eşlem Dizin Taraması
Orta düzeyde seçicilikte PostgreSQL, eşleşen satırların bit eşlemini oluşturup ardından bunları fiziksel sırayla getirebilir; bu, rastgele G/Ç işlemlerinden daha hızlıdır:
EXPLAIN SELECT * FROM orders WHERE status = 'pending';
-- Bitmap Heap Scan on orders
-- Recheck Cond: (status = 'pending')
-- -> Bitmap Index Scan on orders_status_idxPlanlayıcı Neden Sıralı Taramayı Seçer
Yaygın nedenler:
- Filtrelenen sütunda dizin yoktur
- Dizin kullanılamaz (sütun üzerinde işlev, OR koşulları veya tür uyuşmazlıkları vardır)
- Beklenen satır sayısı, dizin kullanımını anlamlı kılmayacak kadar yüksektir
- İstatistikler güncel değildir ve planlayıcı seçiciliği yanlış değerlendirmektedir
Dizin Kullanımını Zorlama (Dikkatle)
PostgreSQL'e doğrudan ipucu veremezsiniz. Bunun yerine:
- İstatistikleri yenilemek için ANALYZE çalıştırın
- Doğru dizini ekleyin
- Oturum ayarlarını belirleyin: tanılama için
SET enable_seqscan = off;(üretimde kullanmayın)
Dizinlenebilir Koşullar
Bir dizinin yardımcı olabilmesi için WHERE koşulu "arama için uygun" olmalıdır; yani dizinlenen sütun doğrudan karşılaştırılmalıdır:
-- GOOD:
WHERE created_at >= '2024-01-01'
-- BAD (function on the column):
WHERE date_trunc('day', created_at) = '2024-01-01'
-- BAD (cast):
WHERE created_at::DATE = '2024-01-01'
-- FIX: add a functional index, or rewrite with range.Bileşik Dizin Sırası
(a, b) üzerindeki bir dizin yalnızca a ve a AND b üzerindeki sorgulara yardımcı olur; yalnızca b üzerindeki sorgulara yardımcı olmaz.
Dizin Boyutu Önemlidir
Sık kullanılan anahtarlara sahip dar bir B-ağacı dizini tamamen bellekte kalabilir; geniş bir dizin kalamayabilir. Küçük dizinler daha hızlıdır.
Planı Doğrulayın
Bir dizin ekledikten sonra, planlayıcının onu gerçekten kullandığını doğrulamak için EXPLAIN ANALYZE çalıştırın. Kullanmıyorsa nedenini araştırın.
Özet
Sıralı tarama ile dizin taraması arasındaki seçim, seçiciliğe göre yapılır.
- Seçici filtre → dizin taraması
- Tablonun çoğu → sıralı tarama
- Aradaki durumlar için bit eşlem taraması
- Arama için uygun koşullara dikkat edin
Hızlı Kontrol
PostgreSQL neden mevcut bir dizin yerine sıralı taramayı seçebilir?
Sıkça Sorulan Sorular
“Sıralı Taramalar ve INDEX Taramaları” dersi ücretsiz mi?
Evet — “Sıralı Taramalar ve INDEX Taramaları” 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.
“Sıralı Taramalar ve INDEX Taramaları” dersinde ne öğreneceğim?
Sıralı taramanın ne zaman yeterli olduğunu, ne zaman INDEX taraması gerektiğini ve planlayıcının buna nasıl karar verdiğini öğrenin. 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 2. dersidir.
“Sıralı Taramalar ve INDEX Taramaları” 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
- EXPLAIN ve EXPLAIN ANALYZE Okuma
- Sıralı Taramalar ve INDEX Taramaları
- Hash Birleştirme ve Birleştirmeli Birleştirme ve İç İçe Döngü
- Yavaş Sorguları Belirleme ve Düzeltme