2009年7月7日 星期二

使用統計資料來改善查詢效能-節錄SQL Server 2008 線上叢書-Technet Library

使用統計資料來改善查詢效能
http://technet.microsoft.com/zh-tw/library/ms190397.aspx

在下列狀況中,請考慮更新統計資料:

(1)查詢執行時間很慢
如果查詢回應時間很慢或無法預測,請先確定查詢具有最新的統計資料,然後再執行其他疑難排解步驟。如需有關疑難排解查詢執行緩慢的詳細資訊,請參閱<分析執行緩慢之查詢的檢查清單>。

(2)插入作業針對遞增或遞減索引鍵資料行進行
遞增或遞減索引鍵資料行 (例如 IDENTITY 或即時時間戳記資料行) 之統計資料所需的統計資料更新頻率可能會比查詢最佳化工具所執行的更新頻率更高。插入作業會將新的值附加至遞增或遞減資料行。所加入的資料列數目可能會太小,而無法觸發統計資料更新。如果統計資料不是最新的,而且查詢會從最近加入的資料列中選取,則目前的統計資料將不會具有這些新值的基數估計值。這可能會導致基數估計值不精確以及查詢效能緩慢。

例如,如果統計資料沒有更新成包含最新銷售訂單日期的基數估計值,則從最新銷售訂單日期中選取的查詢就會具有不精確的基數估計值。

(3)在維護作業之後
在執行變更資料分佈的維護程序 (例如截斷資料表或針對大部分的資料列執行大量插入) 之後,請考慮更新統計資料。這樣做可在查詢等候自動統計資料更新時,避免未來查詢處理產生延遲。

重建、重組或重新組織索引等作業都不會變更資料的分佈。因此,在執行 ALTER INDEX REBUILD、DBCC REINDEX、DBCC INDEXDEFRAG 或 ALTER INDEX REORGANIZE 作業之後,您不需要更新統計資料。當您使用 ALTER INDEX REBUILD 或 DBCC DBREINDEX 來重建資料表或檢視表的索引時,查詢最佳化工具就會更新統計資料。不過,這種統計資料更新是重新建立索引的副產品。在 DBCC INDEXDEFRAG 或 ALTER INDEX REORGANIZE 作業之後,查詢最佳化工具則不會更新統計資料。

[Action]
-- 更新資料庫的所有統計資料
EXEC sp_updatestats
--若要判斷上次更新統計資料的時間,請使用 STATS_DATE 函數。
--http://technet.microsoft.com/zh-tw/library/ms173804.aspx


--針對 SalesOrderDetail 資料表的所有索引更新統計資料。
--複製程式碼
USE AdventureWorks;
GO
UPDATE STATISTICS Sales.SalesOrderDetail;
GO
http://technet.microsoft.com/zh-tw/library/ms187348.aspx

沒有留言: