Pek çok tabağa (10-11) katılan oldukça karmaşık bir saklı yordamda hata ayıklamaya çalışıyorum. Ağacın bir kısmı için tahmin edilen satır sayısının, gerçek satır sayısından büyük ölçüde farklı olduğunu görüyorum - en kötü SQL sunucusunda, gerçekte 55.000 satır döndürüldüğünde, 1 satırın döndürüleceğini tahmin ediyor! Benim istatistiklerin tüm çeşitli tablolar üzerinde FULLSCAN ile güncel ve ben güncelledik istatistikler şunlardır - Bu yüzden SQL sunucusu, tahmini satır sayısını nasıl çalışır?
Ben çalışmak için çalışıyorum. Kullanıcı tanımlı işlevleri veya tablo değişkenlerini kullanmıyorum. SQL Server'ın görebildiğim kadarıyla, kaç satırın geri alınacağını tam olarak tahmin edebilmeli, ancak on binlerce RDI araması gerçekleştirecek bir plan seçmeye devam ediyor (sadece 1 gerçekleştirmek için bekleniyorsa). veya 2).Tahmini satır sayısının neden bu kadar çok dışarı çıktığını anlamak için ne yapabilirim?
GÜNCELLEME: Yani Suspicous görünüyor ben özellikle bir düğüm buldum planına bakarak - onun bir tablo aşağıdaki predecate kullanarak bir masanın üzerine tarayın:
status <> 5
AND [type] = 1
OR [type] = 2
Bu yüklem tüm tabloyu döndürür (630 satır - tablo, zayıf performansın kaynağı DEĞİLDİR) ancak SQL sunucusunun tahmini sayısı yalnızca 37'de olur. SQL sunucusu daha sonra RDI aramaları, dizin taramaları ve indeksleri ile birkaç iç içe döngüler yapar arar. Bu benim büyük yanlış hesaplamanın kaynağı olabilir mi? Daha hassas bir satır sayısını tahmin etmek için nasıl alabilirim? İstatistikleri zaten güncellenmiş yana
Eğer tablo tanımını sonrası misiniz ve tam sorgu çözebilir sizin dizinleri yeniden? – Quassnoi
Üzgünüz, ama gerçekten değil - çok büyük (250 satır sp + 10 tablo). – Justin
Eğer yükleminiz tam olarak böyle ise (parantez yoksa), bir mantık sorununuz olabilir. AND, OR üzerinde önceliğe sahiptir. [status] <> 5 AND olmalıdır (type = 1 VEYA type type = 2) – GilaMonster