我目前在一张表中有大约90k行。在执行清理并将所有行放入“历史表”之前,它将长大约1kk~5kk。所以,当我运行以下查询时(MyEntities是一个ObjectSet):
MyEntities.Skip(amount * page).Take(amount).ToList();
此查询需要大约1.2秒...但是当我使用OrderBy和ThenBy运行以下查询时:
MyEntities.OrderBy(b => b.Day).ThenBy(b => b.InitialHour).Skip(amount * page).Take(amount).ToList();
此查询大约需要5.7秒。有一种方法可以优化第二个查询吗?
答案 0 :(得分:6)
一些建议:
Day
和InitialHour
编入索引。编辑:好的,所以看起来MyEntities
实际上被声明为IEnumerable<MyEntity>
,这意味着所有将在进程中完成...所有LINQ调用都将通过Enumerable.Select
等,而不是Queryable.Select
等。只需将声明的类型的MyEntities
更改为IQueryable<MyEntity>
并观看它...... / p>
答案 1 :(得分:1)
为了从数据库中读取数据,通常最好创建自定义SQL视图,例如每个网格一个视图和一个要填充的每个表单视图。
在此示例中,您将创建一个视图,为您进行排序,然后将该视图映射到实体框架中的实体,然后使用LINQ查询该实体。
这是一个很好的,干净的,可读的,可维护的,并且是最佳的。
祝你好运!