N+1 sorgu problemi nedir ve nasıl çözülür?
Cevap
Bir liste için 1 sorgu atıp, ardından listedeki her eleman için ayrı bir sorgu daha atmaktır. 100 yazar için 101 sorgu oluşur.
// N+1
const yazarlar = await db.query("SELECT * FROM yazarlar");
for (const y of yazarlar) {
y.kitaplar = await db.query("SELECT * FROM kitaplar WHERE yazar_id = $1", [y.id]);
}Çözümler:
- JOIN ile tek sorguda çekmek
WHERE yazar_id IN (...)ile toplu çekip uygulamada eşleştirmek- ORM'lerde eager loading (
include,select_related,with) - GraphQL'de DataLoader ile istekleri birleştirmek
İlgili Veritabanı & SQL soruları
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.