SQL Server 索引如何帮助将 BETWEEN 用于给定查询

Posted

技术标签:

【中文标题】SQL Server 索引如何帮助将 BETWEEN 用于给定查询【英文标题】:How SQL Server indexing can help using BETWEEN for given query 【发布时间】:2017-09-07 07:34:06 【问题描述】:

索引对 SQL Server 中的BETWEEN 子句有帮助吗? 如果我有 20000 行的表并且查询是:

select *
from employee
where empid between 10001 and 20000

【问题讨论】:

检查执行计划。 (而且,答案可能是肯定的。) where 子句索引中的任何内容都会有所帮助。 【参考方案1】:

是的。这是sargable。

它可以对具有前导列empid 的索引进行范围查找。导航 B-tree 以找到第一行 >= 10001,然后按键顺序读取所有行,直到到达范围的末尾。

除非索引为covering,否则您可能无法获得此计划。您的查询包含 select *,因此仅包含 empid 的索引可能需要进行 10,000 次查找才能获取缺失的列。

如果empidemployee 的主键,那么默认情况下它将是聚集索引键(除非您另外指定),因此这将自动覆盖,您应该会看到聚集索引搜索。

【讨论】:

以上是关于SQL Server 索引如何帮助将 BETWEEN 用于给定查询的主要内容,如果未能解决你的问题,请参考以下文章

如何估计 SQL Server 索引大小

如何使MongoDB的列成为SQL Server中发生的主键,避免重复记录?

如何在 SQL Server 中将索引从一个表复制到另一个表

如何通过 SQL Server 插入的索引有效地替换长字符串?

SQL Server 非聚集索引

SQL SERVER执行计划和索引优化基础