MSSQL'de Index Stratejileri ve Execution Plan Okuma
Doğru index ne zaman hızlandırır, ne zaman yavaşlatır? Clustered/non-clustered ayrımı, kapsayan index ve execution plan okuyarak yavaş sorguyu teşhis etme.
Giriş
Bir sorgu yavaşladığında ilk refleks "bir index atalım" olur. Ama yanlış index çoğu zaman işleri iyileştirmez, hatta yazma işlemlerini yavaşlatır. Bu yazıda MSSQL'de index'in ne zaman hızlandırdığını, ne zaman yük olduğunu ve execution plan (yürütme planı) okuyarak yavaş sorguyu nasıl teşhis edeceğini konuşuyoruz.
Problem
Index bir ödünleşimdir: okumayı hızlandırır, yazmayı yavaşlatır ve yer kaplar. "Her kolona index" yaklaşımı bu dengeyi bozar. Doğru karar, sorgunun gerçekte ne yaptığını görmekten geçer — tahminle değil.
Temel kavram
- Clustered index: Tablonun fiziksel sırasını belirler; tablo başına bir tane olur.
- Non-clustered index: Ayrı bir sıralı yapı; aranan değerden asıl satıra işaret eder.
- Kapsayan (covering) index: Sorgunun ihtiyaç duyduğu tüm kolonları içeren, asıl tabloya gitmeyi gereksiz kılan index.
Execution plan okumak
Yürütme planı, motorun sorguyu nasıl çalıştırdığını gösterir. Dikkat edilecek birkaç işaret:
Table Scan / Clustered Index Scan → tüm tablo taranıyor (çoğu zaman kötü)
Index Seek → index ile doğrudan erişim (çoğu zaman iyi)
Key Lookup → index eşleşti ama eksik kolon için tabloya gidiliyor
Sık görülen kalıp: bir Index Seek ardından çok sayıda Key Lookup. Bu, index'in aramayı bulduğunu ama gereken kolonları içermediğini söyler; kapsayan bir index bu maliyeti kaldırabilir.
Sık yapılan hatalar
- Kör index eklemek: Planı okumadan index atmak, sorunu çözmeden yazmayı yavaşlatabilir.
- Kolon sırasını yanlış kurmak: Bileşik index'te kolon sırası, hangi sorguların hızlanacağını belirler.
- Fonksiyonla filtrelemek:
WHERE YEAR(tarih) = 2026gibi ifadeler index kullanımını engelleyebilir; aralıkla yaz. - Gereksiz index biriktirmek: Kullanılmayan index bakım ve yazma maliyetidir; periyodik gözden geçir.
Özet
- Index bir ödünleşimdir; okuma kazancını yazma maliyetiyle tart.
- Kararı execution plan ile ver; Scan/Seek/Lookup işaretlerini oku.
- Çok sayıda Key Lookup görüyorsan kapsayan index düşün.
Sonraki adım
Temeli tazelemek istersen Sözlük'teki SQL ve Index tanımlarına bakabilirsin; buradaki kavramlar yazının geri kalanını daha okunur kılar.
Bu içerik faydalı oldu mu?
Geri bildiriminiz için teşekkürler!
Sıradaki Okuma
Kişisel Siteyi Sıfırdan Yayına Almak: VPS, Nginx ve HTTPS
Kişisel bir siteyi paylaşımlı hostingden bir sanal sunucuya taşırken izlediğim gerçek adımlar: Ubunt...
Bunlar da ilginizi çekebilir
Kişisel Siteyi Sıfırdan Yayına Almak: VPS, Nginx ve HTTPS
Kişisel bir siteyi paylaşımlı hostingden bir sanal sunucuya taşırken izlediğim gerçek adımlar: Ubunt...
API'ye Bağlanmadan AI İçerik Asistanı Tasarlamak: DummyProvider ile Güvenli Akış
Hiçbir dış API'ye bağlanmadan çalışan bir AI içerik asistanı: DummyProvider, sağlayıcı soyutlaması,...


Yorum Yap