N+1 problemi
- SQL kursu
- İleri seviye
- Ders 70/81
- 4 dk
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
-- N+1 çöz
SELECT o.id, c.name FROM orders oÖrnek çözüm
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
SELECT o.id, c.name FROM orders o ____ customers c ON o.customer_id = c.id
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.