Bir API'nin yavaşladığı zamanların büyük kısmında, sorun kod tarafında değil, eksik ya da yanlış kurulmuş veritabanı index'lerinde yatıyor. Index'lemenin mantığını anlamak, birçok performans sorununu koda hiç dokunmadan çözmemi sağlıyor.
Index Nedir, Neden Önemlidir?
Index olmadan bir sorgu, tabloyu satır satır tarıyor (full table scan). Doğru kurulmuş bir index, veritabanının aradığı satırlara doğrudan atlamasını sağlıyor — küçük bir tabloda fark edilmeyen bu maliyet, tablo büyüdükçe katlanarak artıyor.
Sık Filtrelenen Kolonlara Index Eklemek
WHERE koşullarında sık kullanılan kolonlar (örneğin CustomerId, Status) index'lenmesi gereken ilk adaylar. EF Core'da bu, fluent API ile tanımlanabiliyor:
modelBuilder.Entity<Order>()
.HasIndex(o => o.CustomerId);
Her Şeye Index Eklemek de Bir Hata
Her kolona index eklemek, yazma (insert/update) işlemlerini yavaşlatıyor çünkü her yazmada tüm ilgili index'ler de güncelleniyor. Sadece gerçekten sorgularda kullanılan kolonlara index eklemek, okuma ve yazma performansı arasında doğru dengeyi kuruyor.
Composite Index'lerde Sıralamanın Önemi
Birden fazla kolonu içeren bir index'te (composite index), kolonların sırası önemli. (CustomerId, Status) index'i, CustomerId ile filtreleyen sorgularda işe yarar ama sadece Status ile filtreleyen bir sorguda aynı verimliliği sağlamaz.
Execution Plan'ı Okumayı Öğrenmek
Bir sorgunun gerçekten index kullanıp kullanmadığını varsaymak yerine, veritabanının execution plan'ını incelemeyi alışkanlık haline getirdim. Bu, "index ekledim ama neden hâlâ yavaş" sorularına net cevaplar veriyor.
Sonuç
Index'leme, en "görünmez" ama en etkili performans optimizasyonlarından biri. Doğru index stratejisi, bazen koddaki karmaşık optimizasyonlardan çok daha büyük bir fark yaratabiliyor.