【发布时间】:2012-02-28 08:35:52
【问题描述】:
我有一个 SQL 查询,其执行计划取决于我提供的 DateTime 参数。我了解,如果我有以下情况:
WHERE Date > '2012-02-28' AND Date < '2012-01-01'
那么执行计划将只是一个常量的评估,因为不会返回任何结果。但在其他情况下,我会得到对我没有任何意义的不同执行计划。例如条件:
WHERE Date >= '2012-02-01 00:00:00' AND Date <= '2012-02-02 22:00:00'
该查询使用了我添加的索引并对其进行了优化。但是,如果我将条件更改为:
WHERE Date >= '2012-02-27 00:00:00' AND Date <= '2012-02-27 22:00:00'
它不再使用索引。
我在运行查询之前重建了该表上的所有索引。我找不到任何逻辑。所以我的问题是:DateTime 参数如何影响为查询选择的执行计划?
编辑:显然原因是我在 Date 上有一个额外的索引,只是混淆了 SQL Server。删除该索引后,一切都按预期工作。但谢谢你的想法。我没有提供足够的细节让你弄清楚。索引太多永远都不好!
【问题讨论】:
标签: sql sql-server-2008 sql-execution-plan