加速没有where子句的linq查询

时间:2011-10-13 22:12:26

标签: c# sql performance linq

快速LINQ性能问题。

我有一个包含许多记录的数据库,它用于网上商店。

所有查询逻辑和分页都是使用LINQ完成的,并且性能非常好。 这是因为通常搜索产品包含一个或多个where子句,并且将我的结果集缩短为最多几百个结果。 但是..有一个选项可以列出所有产品(当没有提供搜索条件时),并且该查询很慢..真的很慢。即使我只是要求单页使用.Skip(20).Take(10),它仍然很慢,因为总结果是140000个产品。有没有办法限制这个(或所有)查询,以便整个事情的速度保持良好? 我不想强迫我的客户提供一个或多个标准..但另一方面,我告诉他们他们永远不会找到超过2000个产品没有问题。

感谢您的帮助! Tys

4 个答案:

答案 0 :(得分:1)

为什么不按照本文所述限制sql端的记录数 http://www.sqlservercurry.com/2009/06/skip-and-take-n-number-of-records-in.html

答案 1 :(得分:1)

当您在代码中传递查询/结果时,请注意任何“过早”枚举!

还有几个可用的LINQ可视化器,可以帮助查看LINQ表达式实际转换为什么。或者,在集成到代码中之前,您可以在LINQPad中使用表达式...

答案 2 :(得分:0)

您可以做的是让Linq使用数据库中的存储过程。

在这种情况下,它会更快,因为数据库引擎将完成工作并将其返回给Linq;为此做了数据库引擎,它比Linq更接近数据。

我建议你试一试并给我们反馈

答案 3 :(得分:0)

您可以检查表中包含哪些索引以及PK是什么。它可能是表没有索引,所以记录通过字段值进行比较。您还可以在SqlProfiler中捕获查询,单独运行它并分析其查询计划。