İndeksler ve performans
SARGability ve örtük dönüşüm
Filtreyi indeksin kullanabileceği biçimde yaz.
Kavramı anlayalım
SARGable koşul bir erişim yolunun arama sınırlarını kullanmasına elverişlidir. WHERE YEAR(OrderDate) = 2026 yerine başlangıç ve bitiş sınırı yazmak genellikle daha uygun bir desendir. Bu tek başına seek garantisi değildir: istatistik, seçicilik ve maliyet kararı devam eder.
Sütun üzerinde fonksiyon veya veri tipi dönüşümü kullanmak bazı erişim olanaklarını azaltır. Parametre-sütun tip uyumsuzluğu implicit conversion doğurabilir; dönüşümün hangi tarafta oluştuğu önemlidir. LIKE N'abc%' bazı koşullarda arama aralığına dönüşebilir; N'%abc%' normal B-tree ile aynı avantajı genellikle sağlamaz. Dil, collation ve iş kuralı doğruluğunu performans uğruna bozma.
Filtreleri doğru ve ölçülebilir hale getirmek için.
Sadece fonksiyonu kaldırınca sorgunun kesin hızlanacağını söylemek.
Aynı konu. Üç farklı derinlik.
SELECT OrderId FROM lab.SalesOrder WHERE OrderDate >= '20260101' AND OrderDate < '20270101';Yıl aralığı sütunu değiştirmeden sınırlar.
Bu sayfa SQL çalıştırmaz. Örnekleri indirilebilir SqlStudioLab veritabanında, SSMS’de uygula. Geçici tablo örneklerini yeniden çalıştırırken yalnız ilgili #tabloyu temizle. VIEW, procedure ve function örnekleri lab’da kalıcı nesne oluşturur; üretim bağlantısı kullanma.
Önce kendin dene.
Şubat siparişlerini YEAR/MONTH kullanmadan filtrele.
Çözümü ve açıklamasını göster
SELECT OrderId FROM lab.SalesOrder WHERE OrderDate >= '20260201' AND OrderDate < '20260301';103, 104 ve 105 döner; 1 Mart dışarıda kalır.