[SQL SERVER][Performance] Table Scan vs Clustered Index Scan 誰成本高?

[SQL SERVER][Performance] Table Scan vs Clustered Index Scan 誰成本高?

前幾天我在SQL PASS TW看到有人發問一個問題,問題如下

問題:在撇除fragmentation的因素下,table scan (not heap) 與 clustered index scan 哪一個的cost高?

ps:使用table scan就是heap 資料表,因為沒有clustered index,發問者可能搞錯了。

 

我很久以前投稿的文章[作品][RUN!PC]資料庫索引概念和設計有提到B-tree,

而這問題從B-Tree單刀直入,即可撥開烏雲見青天,

很簡單一個主因,資料表建立Clustered index表示資料使用B-tree架構來處理,

反之Table Scan表示資料沒有使用B-tree,至於使用B-tree架構好處我這裡就不多說了,

簡單來說就是加快資料查詢,下面我簡單驗證一下。

 

heap table

image

查詢語法。

image

cpu:15ms 、經過時間=364,s、I/O:583

 

image

cost:0.470492

 

nonheap table

image

先建立clustered index。

 

image

cpu:0ms 、經過時間=363,s、I/O:495

 

image

cost:0.406048

 

從上面簡單測試,你應該知道Clustered index所帶來的好處和重要性,

建立Clustered index 主要可以大大減少I/O成本(因為B-tree架構),

所以Clustered index key請謹慎選擇。

 

 

 

參考

[SQL SERVER][Memo]Clustered VS NonClustered Indexes

[SQL SERVER][Memo]再談 Clustered Index