İndeksler ve performans
İstatistik, cardinality ve join algoritmaları
Optimizer’ın veri hakkındaki bilgisi sınırlıdır.
Kavramı anlayalım
İstatistikler veri dağılımını özetler; histogram ve density bilgileri cardinality tahminine katkı verir. Eski istatistik, örnekleme, korelasyon veya parametre dağılımı yanlış tahmine yol açabilir. Tahmin hatası join seçimini, memory grant’i ve paralelliği etkileyebilir.
Nested loops küçük dış küme ve verimli iç erişimde uygundur. Hash join büyük eşitlik birleştirmelerinde yararlı olabilir; yeterli bellek yoksa spill oluşabilir. Merge join uygun sıralı girdilerle çalışır; sıralama maliyeti ayrıca hesaplanır. Her algoritma bağlama göre doğrudur. Hint kullanmadan önce veri, indeks, istatistik ve sorgu mantığını düzelt. Üretimde toplu UPDATE STATISTICS işlemini ölçmeden başlatma.
Tahmin hatasının plan kararlarını nasıl etkilediğini anlamak için.
Hash join’i veya scan’i kategorik olarak kötülemek.
Aynı konu. Üç farklı derinlik.
SELECT name, auto_created, user_created FROM sys.stats WHERE object_id = OBJECT_ID(N'lab.SalesOrder');Mevcut istatistikleri listeler.
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.
Product için istatistiklerin son güncellemesini incele.
Çözümü ve açıklamasını göster
SELECT s.name, p.last_updated FROM sys.stats AS s OUTER APPLY sys.dm_db_stats_properties(s.object_id, s.stats_id) AS p WHERE s.object_id = OBJECT_ID(N'lab.Product');NULL bilgi, henüz oluşmamış istatistik veya metadata erişimiyle ilişkili olabilir.