Yanıtlar:
İ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 ).
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: