Ala*_*Mil 5 sql-server performance datetime query-performance
我在SQL Server表上有一个日期列调用dd.
dd
---------------------------
10-01-2015 00:00:00.000
22-05-2015 10:22:32.521
27-05-2015 12:30:48.310
24-12-2014 09:51:11.728
27-05-2015 02:05:40.775
....
Run Code Online (Sandbox Code Playgroud)
我需要检索dd值来自过去24小时的所有行.
我找到了3个过滤选项来获得所需的结果:
1. `dd >= getdate() - 1`
2. `dd >= dateadd(day, -1, getdate())
3. `dateadd(day, 1, dd) >= getdate()
Run Code Online (Sandbox Code Playgroud)
我的问题是:所有3个选项都将检索我需要的所有行吗?
如果是这样,它们之间有什么区别?
dd >= getdate() - 1
这有点像黑客,但它有效,但有时它可能导致错误(http://www.devx.com/dbzone/Article/34594/0/page/2).
dd >= dateadd(day, -1, getdate())
这是标准的做事方式.
dateadd(day, 1, dd) >= getdate()
这也可以,但有一个NO.如果在该列上创建了任何索引,则不会使用索引.因为它不是Search Argument(什么使SQL语句可以sargable?).将表达式应用于某个列时,它将变为非,SARG并且不会使用任何索引.
所有3个版本都会产生相同的结果,但首先是黑客攻击,在某些情况下会导致bug.第三个不会使用索引.所以显然应该坚持选项2.