標籤:sp strong 資料 on bs 時間 as 資料庫 sql
最佳化器根據開消確定選擇哪個執行計畫,開消又與行數統計資訊有關,預設情況下統計資訊是在最佳化的過程中自動產生的。
一旦列被標記為需要統計資訊,查詢最佳化工具就會尋找該列以有的統計資訊,如果以有一個統計資訊,下一步就會對它進行,檢查
以確定它足夠新。如果到期就重建統計資訊。(由此可見統計資訊是基於列的)。
--------------------------------------------------------------------------------------------------------------------------------
在資料庫中自動建立統計資訊的選項預設開啟:
alter database .... set auto_create_statistics {on | off};
alter database .... set auto_update_statistics {on | off};
如果系統的自動建立被禁用,查詢會輸出一條警告。在這個模式下DBA 要保證統計資訊對象是最新的。
可以對操作進行提示來控制統計資訊對象的行為。
create index .... with(statistics_norecompute = on)
create statistics .... with(norecompute)
雖然這一些選項一般來說是開啟的,但是下面情況可禁用建立或更新統計資料的功能。
1、DBA 明確決定更新統計資料而不是自動更新,資料庫有一個維護視窗,這種情況下是DBA 相信統計資訊改變會使
最佳化器選擇一種比較慢的計劃
2、資料表太大、自動更新發的時間太長。
3、資料庫表中有許多的唯一值,用於產生統計資訊的採樣頻率不足以擷取產生一個優良執行計畫所需的所有統計資訊。
DBA 可以利用一個維護視窗提高採樣頻率(預設頻率會根據表大小而變化)手動更新統計資料。
4、資料庫定義了一個很短的查詢逾時並且不希望自動統計資訊造成查詢時間明顯長很多,因為這樣可能會引起查詢逾時。
SQL Server 統計資訊對查詢的影響