首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Server使用此索引?

问为什么Server使用此索引?
EN

Database Administration用户
提问于 2015-10-22 10:54:41
回答 1查看 289关注 0票数 2

对于一个有786602行的表,我有两个索引:

代码语言:javascript
复制
CREATE NONCLUSTERED INDEX [IX1] 
ON [dbo].[O] ([A] ASC, [B] ASC)
INCLUDE ([c1], [c2], [c3]) 
     WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
           SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, 
           ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

CREATE NONCLUSTERED INDEX [IX2] 
ON [dbo].[O]([A] ASC, [B] ASC)
INCLUDE ([c1], [c2], [c3], [c4], [c5], [c6], [c7], [c8], [c9], [c10]) 
     WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
           SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, 
           ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

以下查询都使用IX2:

代码语言:javascript
复制
select [c1], [c2], [c3] 
from [O] 
where A = 9 AND B = 10

select [c1], [c2], [c3], [c4], [c5], [c6], [c7], [c8], [c9], [c10] 
from [O] 
where A = 9 AND B = 10

禁用IX2显示查询1使用具有相同性能的IX1。

为什么第一个查询不使用IX1,因为它似乎完全符合需求?

SQL Server真的那么聪明吗?:-)

直接丢弃X1是省钱吗?(这是我的初衷,所以我开始测试X1的使用情况,只是想知道为什么从来不使用)

EN

回答 1

Database Administration用户

发布于 2015-10-26 02:04:48

虽然我不能用任何正式文件来证实这一点,但理由必须根据所列栏目的总规模和费用。

通过我进行的测试,10列和3列的索引具有完全相同的成本和逻辑/物理读取,我认为这与原始海报的环境相同。我逐渐增加了第四栏的大小,在一定程度上,操作系统开始为第一条语句选择第一种索引。使用的桌子大约有55k行。

这只显示了关于优化器某些行为的轶事证据和理论。如果这个理论不正确的话,我希望真正知道它的意义的人会解释为什么。

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

https://dba.stackexchange.com/questions/118879

复制
相关文章

相似问题

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