我查询了以下表格:
DECLARE @date DATETIME = <some_date>
SELECT ....
FROM a
WHERE <some_conditions> AND a.LastEvent < @date
LastEvent列的类型为DATE
。
查询工作得非常快。但是,如果我将@date类型更改为DATE
,查询执行似乎永远不会完成。如果我注释掉条件
AND a.LastEvent < @date
查询再次快速运行。
我很惊讶参数的轻微类型更改会影响性能,但我不知道为什么会发生这种情况。
答案 0 :(得分:1)
可能这与比较需要内部演员进行比较这一事实有关,而且由于每种类型的存储方式,对这两种类型的评估是一项更加昂贵的操作。
对你的问题的其他评论都增加了关于运行测试的宝贵点,以确保你实际测量你认为你正在测量的东西。
理想情况下,您希望尽可能地尽可能地匹配您的类型,因为类型之间的转换操作不是最便宜的事情之一。
此外,索引也基于存储的类型,因此,实际上这可能是您的查询瓶颈所在,而不是类型转换。
查询执行计划应该可以帮助您推断出两种意见。