gpt4 book ai didi

sql-server - SQL 的性能差异

转载 作者:行者123 更新时间:2023-12-02 22:26:04 25 4
gpt4 key购买 nike

我在 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
....

我需要检索过去 24 小时内 dd 值的所有行。

我找到了 3 个过滤选项来获得所需的结果:

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

我的问题是:所有 3 个选项都会检索我需要的所有行吗?
如果是的话它们之间有什么区别?

最佳答案

  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。如果在该列上创建任何索引,它将不会使用索引。因为它不是搜索参数( What makes a SQL statement sargable? )。当您将表达式应用于某些列时,它将变为非 SARG 并且不会使用任何索引。

所有 3 个版本都会产生相同的结果,但首先是 hack,在某些情况下会导致错误。第三不会使用索引。因此,显然应该坚持选项 2。

关于sql-server - SQL 的性能差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30481115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com