首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果索引是支离破碎的,那么不使用索引是一个神话吗?

如果索引是支离破碎的,那么不使用索引是一个神话吗?
EN

Stack Overflow用户
提问于 2014-02-05 08:16:01
回答 2查看 325关注 0票数 0

SQL Server没有使用分段索引是真的吗?

这怎么可能?如果是的话,优化器是如何决定何时使用索引的?

我已经搜索过了,但是找不到使Server忽略特定索引的公式/规则。

编辑:

实际上,我在这个文章中找到了以下语句

高分割度--如果索引碎片超过40%,优化器可能会忽略索引,因为搜索分段索引比执行表扫描代价更高。

因此,优化器似乎忽略了支离破碎的索引。有人能给我们带来更多的启示吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-05 11:24:46

SQL server在索引选择过程中不考虑碎片问题,以下简单的talk文章很好地解释了SQL server的索引选择机制的工作原理:

索引选择与查询优化器

票数 1
EN

Stack Overflow用户

发布于 2014-02-05 09:17:13

我从未听说过严重支离破碎的索引。我不认为SQL服务器优化器会考虑不使用索引。

若要确定是否使用索引,server将使用统计信息。如果您认为可以使用一个索引,但是服务器没有使用它,那么您的统计数据可能是错误的。

如果您想了解更多关于统计的信息:http://blog.idera.com/sql-server/understanding-sql-server-statistics/,关于索引碎片的更多信息,以及如何处理它:http://www.brentozar.com/archive/2012/08/sql-server-index-fragmentation/

编辑:我读过这篇文章,上面写着“可能忽略”。当它被忽视时,据我所知,再一次,基于统计数字。

示例:如果统计数据表明只有一行(数千行)有搜索值,那么我认为它将使用索引,不管索引是多么的零碎。它只需要阅读3页,而不是整个表。如果统计数据显示正在搜索50%的值,则使用表扫描。是否使用索引或表扫描,由统计信息确定。高分割会影响(部分)索引扫描的速度,从而导致优化器选择表扫描比不分段索引更快。因此,尽管它是一个影响索引质量的参数,但我认为索引并不仅仅是因为它是严重支离破碎的。

不过,不要让索引变得支离破碎:)。微软建议重组任何分片> 5%的索引,并以碎片> 30%重新构建索引。(http://support.microsoft.com/kb/2755960)但是这也取决于在这个表中执行了多少次插入。

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

https://stackoverflow.com/questions/21571876

复制
相关文章

相似问题

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