2

我有以下形式的查询:

DECLARE @date DATETIME = <some_date>

SELECT ....
FROM a
WHERE <some_conditions> AND a.LastEvent < @date

LastEvent 列的类型为DATE

查询工作得非常快。但是,如果我将 @date 类型更改为DATE查询执行似乎永远不会完成。如果我注释掉条件

AND a.LastEvent < @date

查询再次快速工作。

我很惊讶参数的轻微类型更改会如何影响性能,但我不知道为什么会发生这种情况。

4

1 回答 1

1

这可能与比较需要内部强制转换进行比较这一事实有关,并且由于每种类型的存储方式的性质,对这两种类型的评估是一项更加昂贵的操作。

对您的问题的其他评论都添加了有关运行测试的有价值的点,以确保您实际测量您认为您正在测量的内容。

理想情况下,您希望尽可能地匹配您的类型,因为类型之间的转换操作并不是最便宜的事情。

此外,索引也基于存储的类型,因此这实际上可能是此查询的瓶颈所在,而不是类型转换的瓶颈所在。

查询执行计划应该可以帮助您在两种意见之间进行推断。

于 2014-01-21T20:15:13.537 回答