哪个被认为更好?
select *
from TableA
where productDate < '12/9/2013'
或
select *
from TableA
where DATEDIFF(day, productDate, '12/9/2013') > 0
在浏览文章时,我读到使用日期函数(例如:datediff,dateadd),其中子句会对性能产生负面影响。这是真的吗?
答案 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 :(得分:2)
将函数应用于列时,您无法使用此列上的任何可用索引。
因此,在DateDiff()
上使用productDate
的效率低于低于运营商的效率