NonClustered Index Seek好,還是Clustered Index Seek好呢?
之前在上課時,有聽過大師說索引的使用
Index Seek 優於 Clustered Index Seek。
我個人的解讀是如果一個Query需要table中的3個欄位
,而某一個Index剛好符合這一個Query需求,此時
使用這一個Index Seek是效能最好的,因為Clustered Index
的子葉層就是Table本身,所以用Clustered Index Seek到
資料的IO會比較高(讀所有欄位)。
但如果Query出來的筆數很少,例:Where id=1 這一種,那IO就沒差了。
下圖為實驗,應可以說明
Create Table indextest(id int identity,id1 int,id2 int,name nchar(100),name2 nchar(100))
go
CREATE UNIQUE CLUSTERED INDEX [Cluster_index] ON [dbo].[indextest]([id] ASC)
go
CREATE NONCLUSTERED INDEX [NonCluster_index] ON [dbo].[indextest]([id] ASC)include(id1,id2)
go
Insert Into indextest(id1,id2,name,name2) values(1,1,N'Rock',N'Rock')
go 1000
set statistics io on
select id,id1,id2 from indextest with(index([Cluster_index])) where id <100
set statistics io off
go
set statistics io on
select id,id1,id2 from indextest with(index([NonCluster_index])) where id <100
set statistics io off
我是ROCK
rockchang@mails.fju.edu.tw