zoukankan      html  css  js  c++  java
  • SQL Server 的 Statistics 簡介

    當你要清空「資料表(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=37625
    SQL Server 2005 效能調校經典 (Microsoft SQL Server 2005 Unleashed)
    ISBN: 986181339X
    ISBN-13: 9789861813394

    -----------------------------------------------------------------------------------------------------------

  • 相关阅读:
    HTML5中meta属性的使用详解
    前端部分兼容性问题汇总
    position元素定位详述
    jquery简单实现轮播图
    事件委托-选项卡案例
    async、await
    前端会遇到的算法
    arguments实参个数
    前端知识点整理(三)
    var、let、const
  • 原文地址:https://www.cnblogs.com/WizardWu/p/4052951.html
Copyright © 2011-2022 走看看