如何优化这个linq查询?(使用OrderBy和ThenBy)

Vin*_*oni 0 c# linq optimization

我目前在一张大约90k行的表中.在执行清理并将所有行放入"历史表"之前,它将长大约1kk~5kk.所以,当我运行以下查询时(MyEntities是一个ObjectSet):

MyEntities.Skip(amount * page).Take(amount).ToList();
Run Code Online (Sandbox Code Playgroud)

此查询大约需要1.2秒...但是当我使用OrderBy和ThenBy运行以下查询时:

MyEntities.OrderBy(b => b.Day).ThenBy(b => b.InitialHour).Skip(amount * page).Take(amount).ToList();
Run Code Online (Sandbox Code Playgroud)

此查询大约需要5.7秒.有一种方法可以优化第二个查询吗?

Jon*_*eet 6

一些建议:

  • 检查它真的在数据库中发生的事情(而不是获取所有实体,然后排序)
  • 确保两个DayInitialHour编制索引.
  • 检查生成的SQL没有做任何疯狂的事情(检查查询计划)

编辑:好的,所以它看起来MyEntities实际上被声明为IEnumerable<MyEntity>,这意味着一切都将在进程中完成...所有LINQ调用将通过Enumerable.Select等,而不是Queryable.Select等等.只需将声明的类型更改MyEntitiesIQueryable<MyEntity>并观察它飞行. ..