相关疑难解决方法(0)

关于 SARGability 的问题

我只需要确认我理解正确:

我最近查看了一个 SO 问题,其中用户在 Linq 中发布了一个答案,例如:

from p in db.table where p.column.AddMinutes(1) > DateTime.Now select p
Run Code Online (Sandbox Code Playgroud)

对于那些不熟悉 Linq 的人,我希望该语句的输出(未经公平测试)是:

SELECT *
FROM table t
WHERE DATEADD(min, 1, t.column) >= GETDATE() 
Run Code Online (Sandbox Code Playgroud)

我对此发表了回复,说日期时间操作应该在变量上(在这种情况下GETDATE()),因此实际上该语句应该反映如下内容:

SELECT *
FROM table t
WHERE t.column >= DATEADD(min, -1, GETDATE())
Run Code Online (Sandbox Code Playgroud)

在我的回复中,我现在不确定的部分,假设如下:

  1. 由于对列的操作,将不会使用索引
  2. 由于上述原因,查询计划将有所不同(未经测试,假设如此)
  3. 由于上述原因,第一个查询实际上会比第二个查询表现更差。

我的问题:

我在推理中遗漏了什么吗?我对么?最后,有没有机构有关于 SARGability 的好文章?

performance linq

11
推荐指数
2
解决办法
188
查看次数

标签 统计

linq ×1

performance ×1