天天看點

第十二章——SQLServer統計資訊(1)——建立和更新統計資訊簡介:建立和更新統計資訊:分析:

目前為止,已經介紹了選擇索引、維護索引。如果有合适的索引并實時更新統計資訊,那麼優化器會選擇有用的索引供查詢之用,因為SQLServer優化器是基于開銷的優化。當在where和on上的列上的資料需要顯示在結果集的時候,如果有實時的統計資訊,優化器會選擇最好的執行方式,因為優化器會從統計資訊中獲得這些資料的明細情況。

在建立索引的時候,SQLServer就會在索引列上建立統計資訊。簡單來說,統計資訊就是索引或者列上能夠描述資料分布的資料。

公式:列上不重複資料的總數/列上的資料總數

選擇性越高,索引性能越好,當上述公式的值為1時,可以用于做為主鍵或者唯一鍵。

統計資訊有助于SQLServer優化引擎選擇合适的索引及相關操作用于執行SELECT語句。有兩個方式建立和更新統計資訊:

1、  手動建立和更新統計資訊

2、  自動建立和更新統計資訊

在開始之前,先來看看如何查找資料庫的目前統計資訊設定:

下面的語句用于顯示where子句中的資料庫或者表的統計資訊情況:

還可以使用以下方式檢視:

1、  現在開始來看看建立和更新統計資訊的不同方式,在資料庫級别,有一個選項,預設為ON,這個選項是:Auto_Create_Statistics:

2、  啟用同步建立列上統計資訊的選項,Auto_Create_Statistics,當執行一個查詢一個精确資料量的資料時,優化引擎會在這個列上建立一個柱狀圖表。由SQLServer建立的統計資訊以_WA開頭,可以看看這些清單:

3、  上面的統計資訊不會因為Auto_Create_Statistics選項設為ON而結束。這些是強制你的統計資訊更新以保證性能優秀。這個隻是定義你的統計資訊是否同步更新。預設情況下這個選項是為ON的。但是有時候不一定符合你的要求,此時可以使用手動更新計劃:

4、  Auto_Update_Statistics選項會在建立索引時、通過Auto_Create_Statistics或者使用者使用CREATE STATISTICS指令手動建立統計資訊時自動更新統計資訊,下面指令使用異步方式更新統計資訊:

5、  此時來看看執行上面語句後的資料庫統計資訊配置情況:

6、  上面的方式均為自動建立和更新統計資訊,現在來看看如何手動實作:

當索引建立時,優化器會建立統計資訊到索引列所在的表或者視圖上,除此之外,如果對Auto_Create_Statistics選項設定了ON,優化器會建立一個單列統計資訊,及時它沒有出現在查詢的所需列上。如果你覺得一些查詢性能有問題,檢查所有謂詞,如果這些列缺失了統計資訊,你可以手動增加,有時候,DTA(資料庫優化顧問)也會建議你建立統計資訊。

一般情況下,在查詢編譯之前,如果開啟了同步更新統計資訊,SQLServer如果發現統計資訊過時,會引發更新統計資訊的操作,然後你的查詢就會使用上實時的統計資訊。而這個操作會阻塞查詢,知道更新結束,但是不會保留這些查詢,它會更新統計資訊以便下次運作查詢的時候可以使用上較新的統計資訊。

預設情況下,隻有sysadmin/db_owner/對象的建立者這三種角色的成員才有權限建立和更新統計資訊。

柱狀圖是一類由SQLServer為了統計資訊而生成的表。可以認為是一個顯示對應列上統計資訊最大和最小值範圍的報表。