2012-04-28 69 views
0

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

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

回答

1

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

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

使用适当的索引,即使表中有1000万行,该查询最多也应该在<的范围内执行1-2秒。

相关问题