【发布时间】:2018-04-15 23:18:32
【问题描述】:
我有一个状态列表 (6) 来查找条目,我的查询如下以使其可缓存并避免重新编译:
from u in db.Users
where u.Status == "Status1" || u.Status == "Status2" || ... u.Status == "Status6"
select u
直到今天它工作得非常好,我发布了一个更新,没有修改查询,也没有更新任何库,它只是一个与查询无关的静态文本更改,但现在但运行时的查询是不同的,并且造成巨大的性能损失:
SELECT u.* FROM USERS u WHERE u.Status in ("Status1", "Status2", ... "Status6")
为什么 EF6.1 开始将我的 OR 查询转换为 IN 查询以及如何防止它并使我以后不会出现这种行为的另一个问题?
【问题讨论】:
-
status = 's1' or status = 's2'和status in ('s1', 's2')在SQL Server中没有区别,肯定有其他问题 -
也许
u.*在第二个查询中? -
这是简化查询,原始查询要大得多,我不能在这里发布。它曾经工作 10-15 毫秒,执行需要一秒钟。
-
我同意 - 没有区别。也许这是一个参数嗅探问题或陈旧的统计数据。
-
但是是的 - 不同之处在于它可能会使用新计划,因为它是不同的文本 SQL
标签: sql entity-framework tsql entity-framework-6 contains