C# GroupBy查询速度慢其他选项是什么?
我需要一个查询来选择具有最小插入日期时间的行。但是groupby查询非常慢 我能做什么来代替groupby 如何提高查询的性能 是否有其他方法使用linq编写此查询 我的表中的行数大约为600000行,并且还在增长 fullsimnumber未编制索引,但isdeleted和insertdatetime编制索引 fullsimnumber是一列,由三个索引的列组成 我的问题是linq查询总是给出超时异常 我将fullsimnumber改为groupby prec、cod、subscribec,它们都被索引了,但仍然得到了tiemout异常 我使用linq to EF(代码优先样式),我在sql中的查询是:C# GroupBy查询速度慢其他选项是什么?,c#,sql,sql-server,linq,entity-framework,C#,Sql,Sql Server,Linq,Entity Framework,我需要一个查询来选择具有最小插入日期时间的行。但是groupby查询非常慢 我能做什么来代替groupby 如何提高查询的性能 是否有其他方法使用linq编写此查询 我的表中的行数大约为600000行,并且还在增长 fullsimnumber未编制索引,但isdeleted和insertdatetime编制索引 fullsimnumber是一列,由三个索引的列组成 我的问题是linq查询总是给出超时异常 我将fullsimnumber改为groupby prec、cod、subscribec,它
SELECT *
FROM dbo.Sim AS t1
JOIN (SELECT FullSimNumber,MIN(InsertDateTime) AS insd
FROM dbo.Sim
GROUP BY FullSimNumber) AS t2
ON t1.FullSimNumber = t2.FullSimNumber AND t1.InsertDateTime = t2.insd
WHERE t1.IsDeleted = 0
我在linq中的查询
from s in ADbContext.Numbers
where !s.IsDeleted
group s by s.FullSimNumber
into g
let sd = g.OrderBy(x => x.InsertDateTime).FirstOrDefault()
select sd;
如果没有任何关于索引和行数等的数据,就很难知道要使查询更快到底需要什么。值得一试的是:
SELECT *
FROM dbo.Sim AS t1
CROSS APPLY (
SELECT TOP 1 FullSimNumber
, InsertDateTime AS insd
FROM dbo.Sim t2
WHERE t1.FullSimNumber = t2.FullSimNumber
AND t1.InsertDateTime = t2.insd
ORDER BY InsertDateTime DESC
) AS t2
WHERE t1.IsDeleted = 0
同样,情况可能更糟!测试它并比较执行时间和负载。表上的索引是什么?您可以在子选择中使用
RANK()OVER(按FullSImNumber顺序按InsertDateTime分区)
?但不知道这是否会更快,这取决于使用的索引。请制定查询计划。我还想说,问题始于需要该子查询的糟糕数据结构。接着是完全不够好的硬件。问题更新为指定索引库仑。这不起作用,因为您在声明别名之前提到了别名t2
:)我想您需要在子查询中别名dbo.Sim
,我如何在linq ef中执行?