sql-server - 查询优化阶段是否考虑到这一点?

标签 sql-server sql-server-2008

我有一个表,其中日期列 StartDate 已建立索引。我只是想知道查询优化阶段如何处理以下形式的查询:

SELECT * 
FROM <dbo.TABLE> 
WHERE (StartDate BETWEEN '2010-01-01' AND '2010-01-10')
OR (StartDate BETWEEN '2010-01-05' AND '2010-01-15')

两个日期之间有重叠。我应该自己进行优化,将日期指定为 (StartDate BETWEEN '2010-01-01' AND '2010-01-15') 还是 SQL 引擎可以自行优化?

最佳答案

将其与变量和常量进行比较:计划应该有所不同。

SQL Server 可以针对常量进行优化,但旨在重用变量。所以这个计划更加笼统,带有变量。使用常量时,不需要“通用可重用计划”,因为如果常量发生变化,它将是一个新计划

“可变”计划不会考虑类似 end < start 的条件这将与常量短路。

正如问题评论中所述,行为符合预期

您应该对带有“Forced Parameterization ”的常量进行同样的操作,但我没有尝试过。

关于sql-server - 查询优化阶段是否考虑到这一点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6919166/

相关文章:

sql - MMC 无法创建管理单元 SQL Server 配置管理器

sql - 像这样的sql查询如何进行分组

c# - 如何开发负载平衡友好的 Web 应用程序

sql - sql server中有2个相同排名的学生的分数计算

sql-server-2008 - pyodbc - 这里传递的用户名/密码是什么?

sql-server - 在 sql server 的唯一键中有一个空值的目的是什么?

sql - 将具有相同标签的 XML 值分隔到不同的行 SQL Server

c# - ASP.NET 项目的 Oracle 到 SQL Server 数据库迁移

sql - 如何将 XML 插入 SQL

sql-server - 更改本地时钟会影响远程 SQL Server 数据库功能