哪个比较日期<或DateDiff更好?

dot*_*00b 3 t-sql sql-server datetime date

哪个被认为更好?

select *
from TableA
where productDate < '12/9/2013'
Run Code Online (Sandbox Code Playgroud)

要么

select *
from TableA
where DATEDIFF(day, productDate, '12/9/2013') > 0
Run Code Online (Sandbox Code Playgroud)

在浏览文章时,我读到使用Date函数(例如:datediff,dateadd),其中子句会对性能产生负面影响.这是真的?

Aar*_*and 9

最好的可能是:

SELECT <column list> -- not * (1)
  FROM dbo.TableA -- please always specify schema (2)
  WHERE productDate < '20131209'; -- always use a semi-colon (3)
    -- and always use a non-regional, unambiguous date format (4)
Run Code Online (Sandbox Code Playgroud)

这将是最好的原因是因为它为优化器提供了在productDate列上使用索引的最佳机会.即使今天不存在索引,明天也可能会添加一个索引.应用类似DATEDIFF()列的函数将始终使表达式不可搜索,这意味着它总是必须使用效率较低的扫描(假设这是唯一的搜索谓词).

至于内联评论:

  1. 糟糕的习惯:使用SELECT*/省略列表

  2. 糟糕的习惯:避免模式前缀

  3. 女士们,先生们,开始你的分号!

  4. 糟糕的习惯:错误处理日期/范围查询

  • 我正想把头向后仰,疯狂地大笑,并因为你说“总是使用分号”而骂你疯了。但是,阅读您的文章后...我想我应该开始使用分号。每天学点东西。 (2认同)