0Pricing
SQL Academy · Ders

Çok Tablolu Birleştirmelerde Performans Ayarı

Birleştirme planlarını okuyun, ipuçlarıyla birleştirme sırasını zorlayın ve çok tablolı sorguları hızlı tutmak için ara satır sayılarını azaltın.

Çok Tablolu Birleştirmelerde Performans Ayarı, CoddyKit'te ücretsiz bir SQL Academy dersidir. Bu, 4 dersinin 4. 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şimler Satır Sayılarını Çoğaltır

A'nın filtreyle eşleşen 10k satırı varsa ve B, A'nın her satırı için 5 eşleşme içeriyorsa A JOIN B 50k satır üretir. Her satır için 5 eşleşme içeren C'yi eklediğinizde sayı 250k olur. Maliyeti, ara satır sayıları belirler.

Erken Filtreleyin, Sonra Birleştirin

Seçici koşulları mümkün olduğunca erken uygulayın:

-- Slow — filters AFTER joining:
SELECT u.email FROM users u JOIN orders o ON o.user_id = u.id
WHERE u.country = 'US' AND o.total > 1000;

-- Same query, planner usually pushes filters down automatically.
-- For complex queries, force it with a CTE/subquery filter.

Tüm Birleşim Sütunlarını Dizinleyin

JOIN'in her iki tarafında da birleşim sütunu üzerinde bir dizin bulunmalıdır (PK otomatik olarak dizinlenir, alt tablonun FK'si için açık bir dizin gerekir):

CREATE INDEX orders_user_id_idx ON orders(user_id);

Belleği Azaltmak için Sütunları Azaltın

Yalnızca ihtiyacınız olan sütunları SELECT ile seçin. Geniş ara satırlar karma ve sıralama arabelleklerinin boyutunu hızla artırır:

-- Wide:
SELECT * FROM users u JOIN orders o ON ...

-- Narrow:
SELECT u.id, u.email, o.id, o.total FROM users u JOIN orders o ON ...

Yıldız Birleşimleri ve Kar Tanesi Şeması

Bir olgu tablosunu çok sayıda küçük boyut tablosuyla birleştirmek analitikte yaygındır. Her boyutun anahtarı üzerinde bir dizin bulunduğundan emin olun.

Birleşim Sırası Önemlidir (Bazen)

Planlayıcı birleşim sırasını seçer; ancak çok sayıda tablo olduğunda (≥ 12) olası sıraları araştırmayı bırakabilir. join_collapse_limit ayarını düzenleyin veya sorguyu CTE'ler olarak yeniden yazın.

Optimizasyon Engelleri Olarak CTE'ler

PG ≥ 12 sürümünde CTE'ler varsayılan olarak satır içine alınır. Gerçekleştirmeyi zorlamak (planlayıcı engeli oluşturmak) için WITH ... AS MATERIALIZED kullanın. Bu, küçük bir ara sonucu bir kez hesaplamak istediğinizde kullanışlıdır.

Karma Birleşimi ve Birleştirmeli Birleşim ve İç İçe Döngü

Planlayıcı, satır tahminlerine göre seçim yapar. Neyin seçildiğini ve tahminlerin doğru olup olmadığını görmek için EXPLAIN ANALYZE çalıştırın.

EXPLAIN (ANALYZE, BUFFERS)
SELECT ... FROM big_a JOIN big_b ON ...;

Kötü Tahminler Kötü Planlara Yol Açar

EXPLAIN ANALYZE içindeki rows değeri actual rows değerinden çok farklıysa istatistikler güncel değildir. ANALYZE çalıştırın; çok sütunlu ilişkiler için genişletilmiş istatistikleri kullanın.

ANALYZE orders;
CREATE STATISTICS orders_country_status (dependencies)
  ON country, status FROM orders;

Dizinlenmiş Sütunlarda İşlev Kullanımından Kaçının

Dizinlenmiş birleşim anahtarları üzerinde işlev kullanmak dizini devre dışı bırakır. Ya bir ifade dizini ekleyin ya da sorguyu yeniden yazın:

-- Bad (LOWER on indexed email kills the index):
ON LOWER(u.email) = LOWER(c.email)

-- Better — add a functional index:
CREATE INDEX users_email_lower ON users(LOWER(email));

Ağır Birleşimler için Gerçekleştirilmiş Görünümler

Beş tabloluk bir birleşim bir panoya veri sağlıyorsa sonucunu gerçekleştirin ve her gece yenileyin. Hız karşılığında güncelliği feda etmiş olursunuz.

Gerçek Sorguları İnceleyin

En yavaş çoklu birleşim sorgularınızı bulmak için pg_stat_statements kullanın. Gerçekten sorun oluşturanları optimize edin.

Özet

Çok tablolı birleşimler şu unsurlara bağlıdır:

  • Her birleşim sütununda dizinler
  • Aşağı itilen seçici koşullar
  • Doğru istatistikler (ANALYZE)
  • Dar projeksiyonlar
  • Yeniden kullanım güncellikten daha önemliyse gerçekleştirme

Hızlı Kontrol

EXPLAIN ANALYZE tahminde rows=1, ancak actual rows=500000 gösteriyor. En olası düzeltme nedir?

Sıkça Sorulan Sorular

“Çok Tablolu Birleştirmelerde Performans Ayarı” dersi ücretsiz mi?

Evet — “Çok Tablolu Birleştirmelerde Performans Ayarı” 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.

“Çok Tablolu Birleştirmelerde Performans Ayarı” dersinde ne öğreneceğim?

Birleştirme planlarını okuyun, ipuçlarıyla birleştirme sırasını zorlayın ve çok tablolı sorguları hızlı tutmak için ara satır sayılarını azaltı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 4. dersidir.

“Çok Tablolu Birleştirmelerde Performans Ayarı” 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. Cross Join ve Kartezyen Çarpımlar
  2. Lateral Birleştirmeler (LATERAL JOIN)
  3. Anti-Birleştirmeler ve Yarı-Birleştirmeler (NOT EXISTS)
  4. Çok Tablolu Birleştirmelerde Performans Ayarı
← SQL Academy Sayfasına Dön