查詢優化器使用統計信息來創建可提高查詢性能的查詢計劃,對于大多數查詢,查詢優化器已經為高質量查詢計劃生成必要的統計信息,但是在少數情況下,您需要創建附加的統計信息或者修改查詢設計以得到最佳結果。因此理解和合理使用統計信息是數據庫優化的方式之一。
統計信息的分類
根據創建源的不同,統計信息分為兩種表統計信息和索引統計信息,除非你自定義它們,否則它們之間沒有本質的區別。
索引統計信息建立在索引上面,因此對于創建已經存在的數據上,在創建索引的時候會掃描全部數據,這些數據也會創建在索引的統計信息上。
表的統計信息創建在列上面。對于已經存在的數據表上面,需要對某些列使用過濾方法(比如 WHERE,JOIN-ON),會在上面自動建立統計信息。只是它們使用采樣數據而不是全部數據。
統計信息的存儲
統計信息存儲在一系列的系統表中,比如Sysindex,你可以通過系統視圖sys.stats 和 Sys.index來查看部分信息。但是詳細的信息可以通過系統函數DBCC SHOW_STATISTICS來查看。統計信息本身占用很少的磁盤空間,所以不需要關注是否刪除不必要的統計信息來釋放更多的磁盤空間。
怎樣查看統計信息的更新時間
DBCC SHOW_STATISTICS
語法DBCC SHOW_STATISTICS ( table_or_indexed_view_name , target ) [ WITH [ NO_INFOMSGS ] < option > [ , n ] ]< option > :: = STAT_HEADER | DENSITY_VECTOR | HISTOGRAM | STATS_STREAM參數
要顯示其統計信息的表或索引視圖的名稱。
要顯示其統計信息的索引、統計信息或列的名稱。 如果 target 是表或索引視圖的現有索引或統計信息的名稱,則返回有關此目標的統計信息。 如果 target 是現有列的名稱,且此列中存在自動創建的統計信息,則返回有關該自動創建的統計信息的信息。 如果列目標中不存在自動創建的統計信息,則返回錯誤消息 2767。
取消嚴重級別從 0 到 10 的所有信息性消息。
如果指定以上一個或多個選項,將根據指定的選項限制該語句返回的結果集。 如果沒有指定任何選項,則返回所有統計信息。
下面的示例顯示 AdventureWorks2012 數據庫中 Person.Address 表的 AK_Address_rowguid 索引的所有統計信息
DBCC SHOW_STATISTICS ("Person.Address", AK_Address_rowguid);
下面的示例將為 AK_Address_rowguid索引顯示的統計信息限制為 HISTOGRAM 數據。
DBCC SHOW_STATISTICS ("Person.Address", AK_Address_rowguid) WITH HISTOGRAM;
什么時候需要維護統計信息
怎樣維護統計信息
SQL Server 提供兩個基本的命令來更新統計信息
在后續的文章中將講述這2個命令的區別和使用方法。
新聞熱點
疑難解答