【发布时间】:2012-01-06 15:44:19
【问题描述】:
我有以下查询需要将近 1 分钟才能执行。
public static Func<Entities, string, IQueryable<string>> compiledInvoiceQuery =
CompiledQuery.Compile((Entities ctx, string orderNumb) =>
(from order in ctx.SOP10100
where order.ORIGNUMB == orderNumb
select order.SOPNUMBE).Union(
from order in ctx.SOP30200
where order.ORIGNUMB == orderNumb
select order.SOPNUMBE)
);
它根据不是我的主键的 ORIGNUMB 进行过滤,我什至不能在上面放置任何索引。我们还有其他方法可以让它更快吗?我在sql server上测试,发现只有查询
from order in ctx.SOP10100
where order.ORIGNUMB == orderNumb
select order.SOPNUMBE
或
select SOPNUMBE
from SOP10100
where ORIGNUMB = @orderNumb
耗时超过 55 秒。请提出建议。
【问题讨论】:
-
由于
ORIGNUMB是您选择标准的唯一元素,因此无法通过索引该特定列来提高性能。 -
如果您无法创建索引,那么您唯一的选择似乎就是重写查询,可能是为了更具选择性(但不太可能没有索引)。
-
:) 我的 DBA 不允许。实际上不确定,可能是因为桌面需要频繁更新,我只是在处理一个模块并且没有完整的可见性。
标签: sql-server linq sql-server-2005 entity-framework linq-to-entities