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 次查找才能获取缺失的列。
如果empid
是employee
的主键,那么默认情况下它将是聚集索引键(除非您另外指定),因此这将自动覆盖,您应该会看到聚集索引搜索。
【讨论】:
以上是关于SQL Server 索引如何帮助将 BETWEEN 用于给定查询的主要内容,如果未能解决你的问题,请参考以下文章
如何使MongoDB的列成为SQL Server中发生的主键,避免重复记录?
如何在 SQL Server 中将索引从一个表复制到另一个表