[SQL SERVER][Performance]篩選的統計資料

[SQL SERVER][Performance]篩選的統計資料

SQL Server 2008 多了一個新功能名為篩選的統計資料,

當正確的使用篩選的統計資料時,

可以改善查詢計畫(取得正確的基數估計值),

下面我用個簡單例子驗證查詢效能的改善,

但我這裡強調一下,一般大多數情況來說,

你無須額外建立篩選的統計資料來改善查詢效能,

因為預設會自動更新和建立統計資料,

而查詢最佳化工具也因為有查詢最佳化統計資料進而建立高品質查詢計畫。

 

  select a.po_year,a.policy_no
  from dbo.qtplg a
  where po_year ='3'
  and policy_no in ('JQZH000790','JQZH000200','JQB0BG5G30','JQB03ZC480','JQB020TO40')
  group by a.po_year,a.policy_no 
  order by policy_no 

 

 

 

 

image

經過時間:45 ms。

 

執行計畫

image

估計的資料列數目:8.39221。

 

image

估計的資料列數目:4.24943。

 

現在我依據查詢的每個資料行建立相關篩選的統計資料來改善原有的查詢效能。

 create statistics fs_po_year on dbo.qtplg(po_year) 
  where  po_year ='3' 
  and policy_no in ('JQZH000790','JQZH000200','JQB0BG5G30','JQB03ZC480','JQB020TO40')

 
  create statistics fs_policy_no on dbo.qtplg(policy_no) 
  where  po_year ='3' 
  and policy_no in ('JQZH000790','JQZH000200','JQB0BG5G30','JQB03ZC480','JQB020TO40')

 

image

經過時間:22 ms。

 

 

 

 

執行計畫(取得更正確的基數估計值)

image

估計的資料列數目:1。

 

image

估計的資料列數目:1。

 

經過簡單的測試,可以看到透過篩選的統計資料確實可以改善查詢效能

(整體的查詢成本和經過時間都有所降低)。

 

 

 

參考

CREATE STATISTICS (Transact-SQL)

使用統計資料來改善查詢效能