首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么有时表扫描比索引扫描更快?

为什么有时表扫描比索引扫描更快?
EN

Stack Overflow用户
提问于 2014-11-26 22:26:06
回答 1查看 551关注 0票数 1

我创建了一个表来测试正在读取的逻辑块的数量,以及查询优化器选择的执行计划,比较这个表有索引时和没有索引时的查询。

测试表是

代码语言:javascript
复制
 create table scan
 ( 
      id int identity(1, 1), 
      a varchar(10), 
      b varchar(10),
      c varchar(10), 
      d varchar(10), 
      e varchar(10), 
      f varchar(10) 
)

当我运行这些查询时:

代码语言:javascript
复制
select * from scan
select id from scan

我有88和58个逻辑读取,还有一个表格扫描算法。

然后,我修改了表,将pk约束和他的集群id放在一起

代码语言:javascript
复制
alter table scan
add constraint fk_id primary key (id)

然后运行相同的查询:

代码语言:javascript
复制
select * from scan
select id from scan

我得到了90和60扫描读取和索引扫描算法。

问题是:如果查询优化器选择运行查询的最佳方式,那么如果表扫描可以读取较少的块,为什么要选择索引扫描?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-27 06:59:55

当您创建主键约束时,默认情况下它是群集的。这意味着您以前的堆是由这个键排序的(在您的例子中是id)。

表中的数据可以通过两种方式之一存储:堆或群集索引。当后者被创造时,前者就消失了。因此,Server不可能对索引执行表扫描--它只能是索引扫描(聚集索引扫描,顺便说一句,这很重要)。

我知道这听起来可能很混乱,但试着阅读一些关于聚集索引的基本知识--这可能会有所帮助。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27159975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档