CodeBlanks Logo Icon CodeBlanks

N+1 problemi

N+1 sorgu tuzağını öğrenirsin.

N+1 problemi

N+1 problemi bir sorgu N satır döner, sonra her satır için ayrı sorgu yapılır. Yavaştır.

-- YANLIŞ: her sipariş için ayrı müşteri sorgusu
-- DOĞRU: JOIN ile tek sorgu
SELECT o.id, c.name FROM orders o JOIN customers c ON o.customer_id = c.id;

JOIN ile N+1 çözülür.

orders o kaynağından o.id, c.name seçilir. customers c tablosu o.customer_id = c.id koşuluyla yalnızca eşleşen satırlarıyla birleştirilir.

N+1 problemi — ayrıntı

N+1 problemi ORM'lerde sık görülür. JOIN veya toplu yükleme ile çözülür.

Örneğin 100 sipariş listeleyip her biri için müşteriyi ayrı sorguyla çekmek 101 sorgu demektir; tek bir JOIN aynı veriyi tek sorguda getirir.

Uygulama N+1 problemi

N+1 problemini JOIN ile çöz: sipariş ve müşteriyi tek sorguda birleştir.

Başlangıç kodu

query.sql
-- N+1 çöz
SELECT o.id, c.name FROM orders o

Örnek çözüm

query.sql
SELECT o.id, c.name FROM orders o JOIN customers c ON o.customer_id = c.id;

Beklenen çıktı

id  name
1   Ayşe
2   Mehmet

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 JOIN ekle

Soru
SELECT o.id, c.name FROM orders o ____ customers c ON o.customer_id = c.id
Cevap
SELECT o.id, c.name FROM orders o JOIN customers c ON o.customer_id = c.id

Açıklama: JOIN orders ile customers'ı customer_id üzerinden birleştirir; indeksli sütun planı hızlandırır.

2 N+1 problemi: kavramları eşleştir

Kavram Anlamı
N+1 çok sorgu
JOIN tek sorgu
yavaş sorun
ORM sık görülür

3 N+1 problemi neyle çözülür?

  • JOIN Doğru cevap
  • DISTINCT
  • INDEX
  • VIEW

Açıklama: JOIN ile N+1 çözülür.

İleri seviye bölümündeki tüm dersler