GC

TEKNİK GÜNLÜK [MAKALE DETAY]

BACK-END NOTLARI & BİLGİ BANKASI

Back-End & Mimari • ⏱️ 4 dk Okuma • 15.10.2026 12:00

Laravel 11 ile Veritabanı Sorgularını Optimize Etme ve N+1 Problemi Çözümleri

Giriş

Modern web projelerinde geliştirme hızımız ne kadar yüksek olursa olsun, veritabanına atılan gereksiz her sorgu kullanıcı deneyimini doğrudan olumsuz etkiler. Özellikle büyük veri setleriyle çalışırken karşılaştığımız en yaygın tuzaklardan biri N+1 sorgu problemidir.

Bu yazıda, Laravel 11'in sunduğu modern araçlarla bu performans kaybını nasıl minimuma indirebileceğimize yakından bakacağız.


N+1 Problemi Nedir?

Diyelim ki her birinin ilişkili olduğu kategorileri çekmeniz gereken bir makale listeleme ekranınız var. Eğer verileri standart döngüyle çağırırsanız, sistem ana liste için 1 sorgu, her bir makalenin kategorisi için ise ayrı ayrı $N$ tane sorgu atar.

Toplamda 1 + N adet veritabanı isteği oluşur. Bu durum sunucu yükünü gereksiz yere artırır.

Yanlış Yaklaşım (Lazy Loading)

$posts = Post::all();

foreach ($posts as $post) { echo $post->category->name; // Her döngüde ekstra sorgu çalışır! }


Eager Loading ile Çözüm (with Kullanımı)

Laravel Eloquent bize ilişkili verileri tek bir hamlede (Join veya WhereIn mantığıyla) çekme imkanı tanır. Buna Eager Loading denir.

Doğru Yaklaşım

$posts = Post::with('category')->get();

foreach ($posts as $post) { echo $post->category->name; // Ekstra sorgu atılmaz, veriler önceden yüklenmiştir. }


Performansı Test Etmek ve İzlemek

Local ortamda geliştirme yaparken sorgu sayısını kontrol etmek için Laravel Debugbar gibi araçları kullanabilir veya DB::enableQueryLog() ile logları inceleyebilirsiniz:

use Illuminate\Support\Facades\DB;

DB::enableQueryLog();

$posts = Post::with('category')->get();

dd(DB::getQueryLog());

Sonuç

Projelerinizde veritabanı katmanını optimize etmek, hem sunucu kaynaklarını korur hem de sayfa açılış sürelerini milisaniyelere indirir. Özellikle API geliştirirken veya büyük listelemeler yaparken with() metodunu unutmak hayat kurtarır.

Herkese iyi kodlamalar! 🚀