c# - LINQ 的 Enumerable.Take 方法在速度方面是否与 SQL 的 TOP 相当?

标签 c# sql performance linq linq-to-sql

我需要在一个包含将近 100 万条条目的表中进行查询,但有趣的部分只有前 500 条。

我想知道在查询行的末尾使用 Take() 方法是否是速度(和内存)优化方面的最佳选择,或者只是执行整个查询然后获取顶部元素是一回事.

最佳答案

如果您运行 Enumerable.Take,那么您正在使用 linq-to-objects - 是的,它将在客户端运行整个查询和过滤器。这将是不必要的昂贵。

这就是您不应该这样做的原因。您应该使用 Queryable.Take - 然后它将做正确的事情,并在数据库中进行分页。

如果您使用:

var page = query.Take(count)

(等)它会自动正确。

关于c# - LINQ 的 Enumerable.Take 方法在速度方面是否与 SQL 的 TOP 相当?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19820828/

相关文章:

c# - 如何判断哪个 TestCaseData 失败(在 TestCaseSource 代码中)

c# - 如何在 Windows 8 Metro C# XAML 应用程序中播放 H.264 RTSP 视频?

Python:一旦找到真值,any() 是否会停止迭代列表/生成器?

node.js - Nodejs : Performance issues parsing CSV and Zip

c# - 在 C# 中选择名称相同但属性内部文本不同的 XML 节点

c# - 使用 CaSTLe ActiveRecord,当两个类具有相同名称但命名空间不同时,我得到一个 NHibernate DuplicateMappingException

如果第二个表没有匹配项,Mysql 返回零行

sql - 如何更新 SQL Server 表中现有的 XML 字段数据?

SQL:比较列以获取精确匹配的集合

python - Python 中 copy.copy 的效率