當你要清空「資料表(table)」,或倒入大量「資料(data;record)」,或公司「資料庫(database)」改用新版本要資料大搬家…等情形,不只是要重建「索引(index)」,還應要重建或更新「統計(statistics)」。「統計」的正確與否,直接牽動 SQL Server 的「效能(performance)」。沒有「統計」固然不好,「統計」若過時,會讓最佳化程式做出錯誤的決定則更糟。
SQL Server 的查詢最佳化程式,會用索引的「統計」,來獲得它所需要的「資訊(information)」,以決定某個索引是否有用處。
如果某個用在搜尋的「欄位(column)」,我們沒有事先為它建立索引,則 SQL Server 會自動為該欄位建立「統計」。自動建立的「統計」會以 _WA_Sys 開頭來命名,如下圖 1。
圖 1
----------------------------------------------------------------------------------------------------------
手動更新「統計」:
透過 CREATE STATISTICS 指令,可針對未建立索引的欄位,直接產生「統計」資訊,也可透過 sp_createstats 系統「預存程序(stored PRocedure)」,直接將某個資料庫內的「所有」資料表,全部的欄位都建立「統計」資訊。 http://msdn.microsoft.com/zh-tw/library/ms188038.aspx http://msdn.microsoft.com/zh-tw/library/ms186834.aspx(hyperlink 若無法連結,可將 zh-tw 改為 zh-cn 再重試)
執行 UPDATE STATISTICS 指令,可要求某個資料表,或是直接指定索引或「統計」來做更新,而 sp_updatestats 系統預存程序,可針對特定資料表,把所有相關的統計進行更新。 http://msdn.microsoft.com/zh-tw/library/hh510198.aspx http://msdn.microsoft.com/zh-tw/library/ms187348.aspx http://msdn.microsoft.com/zh-tw/library/ms173804.aspx
一般來說,我們會依靠「自動更新統計」,但有些特殊情況下,可能會希望立即「手動」更新「統計」,例如 :
* 該資料庫的用途為「資料倉儲(data warehouse)」,平常不會有個別的資料更新,僅有批次更新。在批次更新完資料後,需要立即執行統計的更新。
* 索引中的鍵值,有大量的新增、修改或刪除,而你又確定接下來的運作,會立刻用到索引。
* 透過 TRUNCATE TABLE 清空某個資料表後,重新輸入或倒入資料,也就是資料內容已經完全不同了,但你又需要立即「存取(access)」該資料表。
----------------------------------------------------------------------------------------------------------
自動更新「統計」:
可透過圖形管理介面,在「資料庫屬性」視窗中,切到「選項」頁籤,如下圖 2。
圖 2
-----------------------------------------------------------------------------------------------------------
透過圖形介面的「統計」資料,看是否有 _WA_Sys 開頭來命名的「統計」,也可看出有哪些欄位,曾被應用程式用來搜尋,卻沒有事先建立可用的相關索引。
-----------------------------------------------------------------------------------------------------------
用指令瞭解「統計」資料 DBCC SHOW_STATISTICS(資料表名稱, 索引名稱或欄位名稱) http://msdn.microsoft.com/zh-tw/library/ms174384.aspx
Density(密度),越低越好,較低的索引密度,表示此索引較具「辨識度」。當密度越接近 1,代表此索引越不具辨識度,查詢最佳化工具也就越不願意使用此索引。也代表此索引的存在,對查詢沒幫助,只會影響寫入資料的效能。
有關介紹「統計」的書籍,一些有介紹「資料庫效能」的書籍,多半都會提到。但以章立民先生,在 2008 年寫的下列這本書「SQL Server 2005 效能調校經典」(繁體中文),內容最完整和詳細,對於上圖 2 裡的「自動 非同步(asynchronous)更新統計資料」,此書也有詳細的解釋。但此書因年代久遠,在台灣已絕版 : http://www.tenlong.com.tw/items/986181339X?item_id=37625SQL Server 2005 效能調校經典 (Microsoft SQL Server 2005 Unleashed)ISBN: 986181339XISBN-13: 9789861813394
-----------------------------------------------------------------------------------------------------------
新闻热点
疑难解答