關於表資料行統計的問題和相關誤區

bq_wang發表於2011-06-18
Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE資料庫及其版本:SQL Server2008 原以為針對聚集索引列會快點,結果卻是錯誤的。

 

--一個300多萬記錄的表,無任何索引,進行表掃描

select COUNT(*) from testcount

--'testcount'。掃描計數3,邏輯讀取89181 次,物理讀取1001 次,預讀87602 次,lob 邏輯讀取0 次,lob 物理讀取0 次,lob 預讀0 次。

 

select COUNT(ProductID) from testcount

--'testcount'。掃描計數3,邏輯讀取89181 次,物理讀取915 次,預讀82713 次,lob 邏輯讀取0 次,lob 物理讀取0 次,lob 預讀0 次。

 

create index testcount_pk on testcount(clusterPK)

select COUNT(*) from testcount

--count(*)count(索引列)是差不多的,會自動選擇非聚集索引掃描

select COUNT(ProductID) from testcount

--'testcount'。掃描計數3,邏輯讀取9135 次,物理讀取0 次,預讀14 次,lob 邏輯讀取0 次,lob 物理讀取0 次,lob 預讀0 次。

 

--建立聚集索引後,聚集索引掃描和全表掃描差不多

drop index testcount.testcount_pk

create clustered index testcount_pk on testcount(clusterPK)

select COUNT(*) from testcount

--'testcount'。掃描計數3,邏輯讀取84541 次,物理讀取1287 次,預讀84311 次,lob 邏輯讀取0 次,lob 物理讀取0 次,lob 預讀0 次。

select COUNT(ProductID) from testcount

--'testcount'。掃描計數3,邏輯讀取84541 次,物理讀取1647 次,預讀84098 次,lob 邏輯讀取0 次,lob 物理讀取0 次,lob 預讀0 次。

 

--本以為聚集索引掃描會走非葉子節點即可,結果卻不是

--所以還是統計非空的非聚集索引快點

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/6517/viewspace-700184/,如需轉載,請註明出處,否則將追究法律責任。

相關文章