哪个比较日期更好?还是DateDiff?

时间:2013-12-09 17:19:17

标签: sql-server tsql date datetime

哪个被认为更好?

select *
from TableA
where productDate < '12/9/2013'

select *
from TableA
where DATEDIFF(day, productDate, '12/9/2013') > 0

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

2 个答案:

答案 0 :(得分:8)

最好的可能是:

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)

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

至于内联评论:

  1. Bad habits to kick : using SELECT * / omitting the column list

  2. Bad habits to kick : avoiding the schema prefix

  3. Ladies and gentlemen, start your semi-colons!

  4. Bad habits to kick : mis-handling date / range queries

答案 1 :(得分:2)

将函数应用于列时,您无法使用此列上的任何可用索引。

因此,在DateDiff()上使用productDate的效率低于低于运营商的效率