[英]Sql Select Query Performance
我有以下查询,几乎需要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秒。 请提出建议。
如果在服务器上花费55秒钟,则与linq有关。 为什么不能在其上建立索引,因为您需要一个...。
另一个选择是在开始搜索订单编号匹配项之前,调整逻辑以过滤出记录(使用索引列)。
LINQ to SQL的主要问题之一是您几乎无法控制正在生成的SQL。
由于您运行的是联合而不是联接,因此它应该是一个非常简单的SQL。 像这样:
SELECT *
FROM SOP10100
WHERE ORIGNUMB = 'some number'
UNION
SELECT *
FROM SOP30200
WHERE ORIGNUMB = 'some number'
您可以使用SQL Server Profiler来查看针对数据库运行的SQL语句,以查看SQL是像这样还是更复杂。 然后,您可以运行在SQL Server Management Stuido中生成的SQL,并打开“包括客户端统计信息”和“包括实际执行计划”,以查看到底是什么引起了性能问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.