[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
查詢語法。
cpu:15ms 、經過時間=364,s、I/O:583
cost:0.470492
nonheap table
先建立clustered index。
cpu:0ms 、經過時間=363,s、I/O:495
cost:0.406048
從上面簡單測試,你應該知道Clustered index所帶來的好處和重要性,
建立Clustered index 主要可以大大減少I/O成本(因為B-tree架構),
所以Clustered index key請謹慎選擇。
參考