SQL:DateTime缩小哪种方式更有效?

时间:2016-10-12 13:45:15

标签: sql

我有一个适用于WHERE子句的查询。

WHERE DATEDIFF(day, [EventStartDateTime], GETDATE()) <= 60

WHERE EventStartDateTime < DATEADD(DY, -60, GETDATE())

我的问题是,哪个更有效率?怎么样?有没有办法在未来衡量这一点来测试自己?

2 个答案:

答案 0 :(得分:2)

使用第二个,它是sargable并且可以使用索引(如果存在)

EventStartDateTime < DATEADD(DY, -60, GETDATE())

同样WHERE条款不是Sargabilty重要的唯一地方。它也可以对ORDER BY,GROUP BY和HAVING子句产生影响。

  

有没有办法在将来衡量这一点来测试自己?

您可以查看execution plan,查看它是在进行搜索还是扫描。 这并不意味着搜索是好的或扫描是坏的。当你有索引并且它是Sargable时,它会尝试*寻找值,而不是扫描整个表

请参阅以下链接,其中包含@AdatheDev在评论中所指出的更多详细信息。

Is this date comparison condition SARG-able in SQL?

答案 1 :(得分:0)

=IF(LEN(AF443)-LEN(INT(AF443)) = 0, 0, LEN(AF443)-LEN(INT(AF443))-1)

这种方式有效的原​​因是它使查询更加优化,因为索引将放在 SELECT <column list> FROM schemaname.tablename -- please always specify schema WHERE EventStartDateTime < DATEADD(DY, -60, GETDATE()) 上。如果今天你没有放索引,你可能希望将来使用它。因此将EventStartDateTime等函数应用于列将始终使表达式更复杂,因此它将始终使用效率较低的扫描(如果使用单个搜索谓词(。)。