Eloquent N+1 Sorgu Problemi & with() Eager Loading
Döngü içinde her satır için veritabanına ayrı ayrı koşup MySQL sunucusunu boğma hatasıdır.
5 Yaşındaki Çocuğa Anlatır Gibi (Analoji)
Markete gidip 20 paket makarna alacakken, her paket için tek tek eve gidip geri dönmektir. Eager loading hepsini tek alışveriş arabasına yüklemektir.
Teknik ve Profesyonel Tanımı
Ana sorgu (1 adet) çekildikten sonra ilişkili tabloların döngü içinde Lazy Loading ile her adımda çağrılması sonucu toplam N+1 SQL sorgusunun çalışmasıdır. Laravel'de with() kullanılarak tek bir "WHERE IN (...)" sorgusuyla çözülür.
Mülakatta Ne Demelisin? (Kurtarıcı Altın Cevap)
"N+1 problemi, ilişkili model verilerinin döngü içinde her seferinde ekstra bir SQL sorgusu tetiklemesiyle oluşur. Laravel Eloquent'te with(['relation']) eager loading kullanılarak toplam sorgu sayısı 2'ye (ana tablo + WHERE IN) düşürülür."
PHP (Laravel) Kod Örneği
// KÖTÜ: 100 kullanıcı için 101 sorgu atar!
$users = User::all();
foreach($users as $u) { echo $u->profile->avatar; }
// DOĞRU: Sadece 2 optimize sorgu atar!
$users = User::with('profile')->get();
Laravel Debugbar veya Telescope kullanmadan production'a çıkmak ve arka planda yüzlerce sorgu çalıştığını fark etmemek.
İlgili Diğer Konular
Laravel Service Container & Service Providers
Tüm sınıfların bağımlılıklarını tek merkezden yöneten ve oto...