Veritabanı istatistikleri nedir ve bunlardan nasıl yararlanabilirim?


18

SQL Server'ın varsayılan olarak tuttuğu istatistiklerden bahsetmiştim. Neleri izliyorlar ve bu bilgileri veritabanımı geliştirmek için nasıl kullanabilirim?

Yanıtlar:


21

İstatistikler, sorgu iyileştiricinin daha iyi kararlar almasına yardımcı olan bir tür dinamik meta veri biçimidir. Örneğin, bir tabloda yalnızca bir düzine satır varsa, arama yapmak için bir dizine gitmenin anlamı yoktur; tam bir masa taraması yapmak her zaman daha iyi olacaktır. Ancak aynı tablo bir milyon satıra kadar büyürse, muhtemelen dizini kullanmaktan daha iyi olacaksınız. Ancak bu tabloyu yalnızca çok az benzersiz değeri olan bir sütunda sorgularsanız (örneğin, yalnızca "M" veya "F" içeren bir "seks" sütunu olabilir), aslında bir FTS, bu durumda daha iyi olabilir, çünkü sonuç kümesini oluşturmak için yine de bloğu almanız gerekir. Şimdi tablonuzun% 99 "M" ve yalnızca% 1 "F" olduğunu söyleyin, bir durumda FTS kullanmalı veya diğerinde bir dizin kullanmalıyız. Aynı tablo, aynı sorgu, tablonun içeriğine bağlı olarak potansiyel olarak dört farklı sorgu planı. Bu tür şeyler "istatistikler" dir ve her veritabanına özeldir - aynı tablo ve dizin yapısına sahip iki veritabanı bile farklı istatistiklere sahip olacaktır.

Özetle, modern bir veritabanı motorunda iki tür sorgu optimizasyonu vardır: SQL'i yeniden yazmak (bir derleyici gibi kural tabanlı optimizasyon, C'nizi daha verimli hale getirmek için yeniden yazar) ve verilerin doğru yolunu seçmek (maliyet tabanlı optimizasyon) , çalışma zamanında sıcak noktaları belirleyen bir JIT derleyicisi gibi). Sorgu optimize edicinin açıkça yanlış bir şey yaptığını fark ederseniz bu konuda endişelenmeniz gerekir (örneğin, bir dizinin daha iyi olacağını bildiğinizde FTS'yi seçmek ).


2
+1 Daha iyi açıklayamazdım. İstatistiklerin yalnızca güncel tutulursa yararlı olduğunu hatırlamak önemlidir. Bu, otomatik güncelleme istatistikleri veya düzenli olarak planlanan (gecelik / haftalık) güncelleme istatistikleri komutu ile yapılabilir. Ayrıca, dizin yeniden oluşturma otomatik olarak bir istatistik güncellemesi gerçekleştirir.
Matt M

5

Onlar edilir sorgu Geliştirici kullandığı endeksler ve / veya sütunlardaki değerlerin dağılımını izlemek için (MSDN üzerinde teknik inceleme).

Sizin tek endişe olmalıdır düzenli güncelleme sadece kendi şeyler yapmak için DB motorunu bırakın:


2
Her zaman değil. Bir istatistik oluşturmanın manuel olarak sorgu performansına yardımcı olabileceği zamanlar vardır.
mrdenny

@mrdenny: Bunu gerçek hayatta ne sıklıkla yaptınız? Çok nadiren. Ben IIRC yok. Eğer istatistiğe ihtiyaç duyuyorsa, yine de istatistiği olan bir indekse ihtiyacı olduğunu iddia edebilir. Sütun istatistiklerini yalnızca CREATE STATISTICS'e göre oluşturabilirsiniz . Verilen OP istatistiklerini sormak zorunda kaldım, bunun adil bir şey olduğunu söyleyebilirim.
gbn

1
Birkaç kez yaptım, ama sık değil. İstatistikleri güncellemek tek şey olmadığı için "Tek endişeniz düzenli olarak güncellemek olmalı" ifadenize karşı çıkıyordum.
mrdenny
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.