· Admin

MySQL Query Optimizasyonu: N+1 Problemini Çözmek

N+1 query problemi, ORM kullanan her geliştiricinin en sık karşılaştığı performans sorunlarından biridir.

Problem Nedir?

Bir blog listesi düşünün. Her post'un yazarını göstermek istiyorsunuz:

$posts = Post::all(); // 1 query
foreach ($posts as $post) {
    echo $post->author->name; // N query (her post için 1)
}

100 post varsa = 101 query! Bu bir felaket.

Çözüm: Eager Loading

$posts = Post::with('author')->get(); // Sadece 2 query!

// Nested eager loading
$posts = Post::with(['author', 'categories', 'tags'])->get();

Tespit Araçları

  • Laravel Debugbar: Query sayısını ve süresini gösterir
  • preventLazyLoading(): N+1 olduğunda exception fırlatır
  • Telescope: Tüm query'leri loglar