0Pricing
SQL Academy · Ders

Hash Birleştirme ve Birleştirmeli Birleştirme ve İç İçe Döngü

Üç temel birleştirme stratejisini, maliyet profillerini ve planlayıcının her birini ne zaman en uygun seçenek olarak gördüğünü öğrenin.

Hash Birleştirme ve Birleştirmeli Birleştirme ve İç İçe Döngü, 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.

Üç Birleştirme Stratejisi

PostgreSQL'in üç fiziksel birleştirme algoritması vardır:

  • İç İçe Döngü — her dış satır için iç tarafı tarar
  • Karma Birleştirme — iç tarafın karma tablosunu oluşturur, dış tarafla arama yapar
  • Sıralı Birleştirme — iki taraf sıralıdır ve eşzamanlı olarak birleştirilir

İç İçe Döngü

En basit yöntem: dış × iç. İç tarafta iyi bir dizin VE dış taraf küçük olduğunda hızlıdır:

EXPLAIN ANALYZE
SELECT * FROM users u JOIN orders o ON o.user_id = u.id
WHERE u.id = 42;
-- Nested Loop
--   -> Index Scan on users where id = 42  (rows=1)
--   -> Index Scan on orders_user_id_idx    (rows=5)

İç İçe Döngü Ne Zaman Kazanır

Dış tarafta az sayıda satır VE birleştirme anahtarında iç tarafa ait bir dizin varsa İç İçe Döngü son derece hızlıdır. En kötü durum: O(dış × iç).

Karma Birleştirme

Bir tarafta (genellikle daha küçük olanında) karma tablosu oluşturun, ardından diğer tarafla arama yapın. Birleştirme anahtarında kullanılabilir bir dizin olmadığında iki büyük tabloyu birleştirmek için mükemmeldir:

EXPLAIN ANALYZE
SELECT * FROM big_a a JOIN big_b b ON a.key = b.key;
-- Hash Join (cost=10000..50000)
--   -> Seq Scan on big_a
--   -> Hash
--       -> Seq Scan on big_b

Karma Birleştirme Ne Zaman Kazanır

İki orta veya büyük tablo, birleştirme anahtarında iyi bir dizin olmaması ya da planlayıcının çok sayıda satıra ihtiyaç duyması durumunda kullanılır. Bellek sınırı vardır: karma tablo work_mem içine sığmalıdır; aksi hâlde diske taşar.

Sıralı Birleştirme

Her iki taraf da birleştirme anahtarına göre sıralanır ve birlikte taranır. Her iki taraf da zaten sıralı olduğunda (örneğin eşleşen bir dizin sayesinde) mükemmeldir:

EXPLAIN ANALYZE
SELECT * FROM big_a a JOIN big_b b ON a.key = b.key
ORDER BY a.key;
-- Merge Join
--   -> Index Scan on big_a (a.key ASC)
--   -> Index Scan on big_b (b.key ASC)

Sıralı Birleştirme Ne Zaman Kazanır

Önceden sıralanmış iki büyük girdi. Doğrusal tarama ve düşük bellek kullanımı sağlar. Sıralama maliyeti önemlidir; her iki tarafın da açıkça sıralanması gerekiyorsa genellikle karma birleştirme kazanır.

Aralarında Seçim Yapma

Planlayıcı seçimini şunlara göre yapar:

  • Tahmin edilen satır sayıları
  • Kullanılabilir dizinler
  • Bellek (work_mem)
  • postgresql.conf içindeki maliyet sabitleri

Bir Stratejiyi Zorlama (Yalnızca Tanılama İçin)

Hata ayıklama amacıyla stratejileri devre dışı bırakabilirsiniz:

SET enable_hashjoin = off;
SET enable_mergejoin = off;
SET enable_nestloop = off;
-- Re-run EXPLAIN to see what the planner picks instead.
-- NEVER persist these in production.

Diske Taşma

Karma tablo veya sıralama work_mem sınırını aşarsa işlem, geçici dosyaları diske taşır; bu çok daha yavaştır. Ya work_mem değerini artırın ya da sorguyu yeniden yazın.

Paralel Birleştirmeler

PostgreSQL, Karma Birleştirme ve Sıralı Birleştirmenin yanı sıra sıralı ve dizin taramalarını da paralel çalıştırabilir; bu durum EXPLAIN çıktısında Parallel Hash Join ve Workers Planned olarak görünür.

Seçimi Okuma

EXPLAIN ANALYZE çıktısında birleştirme düğümünün adı, kullanılan stratejiyi gösterir. Seçim neredeyse her zaman doğrudur; doğru olmadığında stratejileri zorlamadan önce istatistiklere ve dizinlere odaklanın.

Özet

Üç birleştirme stratejisi farklı veri biçimlerine hizmet eder.

  • İç İçe Döngü: küçük dış taraf + dizinli iç taraf
  • Karma Birleştirme: büyük tablolar, kullanılabilir dizin yok
  • Sıralı Birleştirme: önceden sıralanmış girdiler

Hızlı Kontrol

Dizinsiz bir sütun üzerinden 10 milyon satırlık iki tabloyu birleştiriyorsunuz. Planlayıcının hangi birleştirme algoritmasını seçmesi olasıdır?

Sıkça Sorulan Sorular

“Hash Birleştirme ve Birleştirmeli Birleştirme ve İç İçe Döngü” dersi ücretsiz mi?

Evet — “Hash Birleştirme ve Birleştirmeli Birleştirme ve İç İçe Döngü” 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.

“Hash Birleştirme ve Birleştirmeli Birleştirme ve İç İçe Döngü” dersinde ne öğreneceğim?

Üç temel birleştirme stratejisini, maliyet profillerini ve planlayıcının her birini ne zaman en uygun seçenek olarak gördüğünü öğ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 3. dersidir.

“Hash Birleştirme ve Birleştirmeli Birleştirme ve İç İçe Döngü” 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. EXPLAIN ve EXPLAIN ANALYZE Okuma
  2. Sıralı Taramalar ve INDEX Taramaları
  3. Hash Birleştirme ve Birleştirmeli Birleştirme ve İç İçe Döngü
  4. Yavaş Sorguları Belirleme ve Düzeltme
← SQL Academy Sayfasına Dön