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
  1. INNER JOIN ile LEFT JOIN arasındaki fark nedir?KolayVeritabanı & SQLBackend
  2. Bir tablodaki ikinci en yüksek maaşı bulun.OrtaVeritabanı & SQLBackend
  3. Index nedir? Dezavantajları nelerdir?OrtaVeritabanı & SQLBackend
  4. ACID nedir?OrtaVeritabanı & SQLBackend
  5. Normalizasyon nedir? Ne zaman denormalizasyon yaparsınız?ZorVeritabanı & SQLBackend

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle