【发布时间】:2012-03-28 23:05:31
【问题描述】:
我目前在一张表中有大约 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 秒。有没有办法优化第二个查询?
【问题讨论】:
-
你在数据库中的表上有合适的索引吗?
-
表的后备存储是什么?如果是 SQL,那么您可能只需要一些索引
-
你为什么要强迫 Linq 做数据库查询应该做的工作? SQL 查询/过程在处理如此大量的记录方面效率更高。
-
@SpikeX:是什么让您认为数据库没有这样做? LINQ 的好处之一是在 C# 中指定查询,但它执行为 SQL。
-
@Servy:实际上我怀疑 LINQ to Objects 相当能够在 5 秒内处理 90K 条记录。对于一台现代机器来说,这已经是 很多 的时间了,而 90K 记录真的不算多。
标签: c# linq optimization