【SQL-Server】非丛集索引Index Scan、Seek讨论、研究

最近在MSDN回答一个问题:
建立非丛集索引时,索引键资料行、包含资料行的顺序是否影响查询效能?

回答问题时
发现自己对索引概念都是以经验角度出发,怕自己有错误的逻辑地方
觉得满有趣的

提出跟大大们来做讨论、研究。 http://img2.58codes.com/2024/emoticon13.gif


以下个人经验跟观点:

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:
enter image description here

seek:
enter image description here

来源: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
中英对照:

英中Index Scan索引扫描Index Seek索引搜寻

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章