我需要从用户统计表中获取最后50条记录(表有超过一百万条记录)。如果我在下面运行查询,我会得到非常慢的响应,IIS7池内存使用量会跳升到800mb。我认为查询将在SQL Server上执行,而不是在应用程序本身。如何优化此查询?
user.Statistics.OrderByDescending(p => p.DateStamp).Take(50);
答案 0 :(得分:1)
此查询将在服务器上执行。我的猜测是查询很慢,因为你在DateStamp列上没有适当的索引。
我强烈建议您获取LinqPad的副本(如果您还没有副本),在LinqPad中执行此查询,查看将哪些T-SQL发送到服务器(LinqPad允许您执行此操作) ,使用T-SQL并查看SSMS中的查询执行计划。我敢打赌正在进行表扫描,而不是索引搜索。
使用适当的索引,此查询应在<最多1-2秒,即使表中有1000万行。