繁体   English   中英

SQL选择查询性能

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM