我只需要确认我正确理解了一些内容:
我最近查看了一个SO问题,其中用户在Linq中发布了一个答案,例如:
from p in db.table where p.column.AddMinutes(1) > DateTime.Now select p
对于那些不熟悉Linq的人,我希望该语句的输出(未经过公平测试)是:
SELECT *
FROM table t
WHERE DATEADD(min, 1, t.column) >= GETDATE()
我对此发表了回复,说datetime操作应该在变量上(在本例中为GETDATE()
),因此实际上该语句应反映如下内容:
SELECT *
FROM table t
WHERE t.column >= DATEADD(min, -1, GETDATE())
在我的答复中,我现在不确定的部分假定如下:
- 由于对列的操作,将不使用索引
- 由于上述原因,查询计划会有所不同(假设尚未测试,则未经测试)
- 由于上述原因,第一个查询实际上将比第二个查询执行得差。
我的问题:
我在推理中错过了什么吗?我对么?最后,是否有任何机构在有关SARGability方面有任何好的文章?