0

我需要从用户统计表中获取最后 50 条记录(表中有超过一百万条记录)。如果我在下面运行查询,我会得到非常慢的响应,并且 IIS7 池内存使用量会跃升至 800mb。我认为查询将在 SQL Server 上而不是在应用程序本身上执行。如何优化这个查询?

user.Statistics.OrderByDescending(p => p.DateStamp).Take(50);
4

1 回答 1

1

此查询将在服务器上执行。我的猜测是查询很慢,因为您在 DateStamp 列上没有适当的索引。

我强烈建议您获取 LinqPad 的副本(如果您还没有副本),在 LinqPad 中执行此查询,查看正在将什么 T-SQL 发送到服务器(LinqPad 允许您这样做),采取T-SQL 并查看 SSMS 中的查询执行计划。我敢打赌正在进行表扫描,而不是索引查找。

有了适当的索引,这个查询最多应该在 1-2 秒内执行,即使表中有 1000 万行。

于 2012-04-28T12:18:56.963 回答