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.