我正在进行如下查询:
SELECT
*
FROM a
WHERE DATEDIFF(D, a.DateValue, DateTimeNow) < 3;
并且无法正常工作
我试图获取不超过3天的数据。
SQL server。
怎么做?
DATEDIFF工作太慢..
答案 0 :(得分:27)
DateDiff
非常快......你的问题是你在数据库表列值上运行它,所以查询处理器必须在表中的每一行上运行该函数,即使有一个索引这一栏。这意味着它必须从磁盘加载整个表。
而是在今天的日期使用dateAdd
函数,并将数据库表列与该单个计算的结果进行比较。现在它只运行DateAdd()
一次,它可以使用索引(如果存在),只加载与谓词标准匹配的行。
Where a.DateValue > DateAdd(day,-3,getdate())
以这种方式执行此操作会使您的查询谓词SARG-able
答案 1 :(得分:1)
微软在http://msdn.microsoft.com/en-us/library/aa258269%28v=sql.80%29.aspx上的文档表明,DateTimeNow
应该getdate()
而不是{{1}}。这样做有用吗?
答案 2 :(得分:0)
您的查询似乎并不糟糕。另一种解决方法是:
SELECT * FROM a WHERE a.DateValue > DATEADD(dd,-3,GETDATE())