SQL中的性能差异

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个选项都将检索我需要的所有行吗?
如果是这样,它们之间有什么区别?

Gio*_*uri 7

  1. dd >= getdate() - 1

这有点像黑客,但它有效,但有时它可能导致错误(http://www.devx.com/dbzone/Article/34594/0/page/2).

  1. dd >= dateadd(day, -1, getdate())

这是标准的做事方式.

  1. dateadd(day, 1, dd) >= getdate()

这也可以,但有一个NO.如果在该列上创建了任何索引,则不会使用索引.因为它不是Search Argument(什么使SQL语句可以sargable?).将表达式应用于某个列时,它将变为非,SARG并且不会使用任何索引.

所有3个版本都会产生相同的结果,但首先是黑客攻击,在某些情况下会导致bug.第三个不会使用索引.所以显然应该坚持选项2.