最近在MSDN回答一个问题:
建立非丛集索引时,索引键资料行、包含资料行的顺序是否影响查询效能?
回答问题时
发现自己对索引概念都是以经验角度出发,怕自己有错误的逻辑地方
觉得满有趣的
提出跟大大们来做讨论、研究。
以下个人经验跟观点:
1.先建立一个测试DDL:
CREATE TABLE TestTable([col1] varchar(2), [col2] varchar(2), [col3] varchar(2)); Create Nonclustered Index Index_TestTable on TestTable ([col1], [col2]) ;
2.Index Scan也是索引功效,而且效能大部分情况会输给 Index Seek,少部分不会
。
(通常在表资料量小的时候)
而要使用Index Seek还是Index Scan是靠DBMS的运算逻辑决定的。
scan跟seek差别概念可以看S.O这篇文章
scan:
seek:
来源:Index Seek vs Index Scan in SQL Server - Stack Overflow
3.资料量小的时候系统有时候会判断"全表格搜寻"为最佳,而不走索引
举例:
当资料量小的时候(测试资料5000笔数)就算条件都在索引设定内,还是会走table scan
select [col1], [col2], [col3] from TestTablewhere [col1] = '' and [col2] = '' ;
但有时候会判定走Index Seek
,当资料量达到一定程度(测试资料100000笔数)
select [col1],[col2] from TestTable3where [col1] = '' and [col2] = ''
当资料量小的时候又会走Index Scan
(测试资料500笔数),select栏位都在索引栏里面
P.S
中英对照: