Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# GroupBy查询速度慢其他选项是什么?_C#_Sql_Sql Server_Linq_Entity Framework - Fatal编程技术网

C# GroupBy查询速度慢其他选项是什么?

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,它

我需要一个查询来选择具有最小插入日期时间的行。但是groupby查询非常慢

我能做什么来代替groupby

如何提高查询的性能

是否有其他方法使用linq编写此查询

我的表中的行数大约为600000行,并且还在增长

fullsimnumber未编制索引,但isdeleted和insertdatetime编制索引

fullsimnumber是一列,由三个索引的列组成

我的问题是linq查询总是给出超时异常

我将fullsimnumber改为groupby prec、cod、subscribec,它们都被索引了,但仍然得到了tiemout异常

我使用linq to EF(代码优先样式),我在sql中的查询是:

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中执行?