我有一个SQL查询,其执行计划取决于我提供的DateTime参数。我明白,如果我有这样一个条件:SQL Server 2008:执行计划取决于日期参数
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参数如何影响为查询选择哪个执行计划?
编辑:显然,原因是我有一个额外的索引在日期只困惑的SQL Server。删除索引后,所有内容都按预期工作。但是,谢谢你的想法。我没有提供足够的细节让你弄清楚。索引太多从来都不好!
感谢您的想法(我甚至不知道过滤索引存在)。该索引未被过滤,表未分区。查询计划似乎取决于统计数据。 – 2012-02-28 14:12:24