EF-Linq查询排序的最快方法是什么?

鲍勃

从理论上讲,使用实体框架会更快:

// (1) sort then select/project
// in db, for entire table
var results = someQuery
              .OrderBy(q => q.FieldA)
              .Select(q => new { q.FieldA, q.FieldB })
              .ToDictionary(q => q.FieldA, q => q.FieldB);

或者

// (2) select/project then sort
// in db, on a smaller data set
var results = someQuery
              .Select(q => new { q.FieldA, q.FieldB })
              .OrderBy(q => q.FieldA)
              .ToDictionary(q => q.FieldA, q => q.FieldB);

或者

// (3) select/project then materialize then sort
// in object space
var results = someQuery
              .Select(q => new { q.FieldA, q.FieldB })
              .ToDictionary(q => q.FieldA, q => q.FieldB)
              .OrderBy(q => q.FieldA);  // -> this won't compile, but you get the question

我不是SQL专家,但直觉上似乎2比1快...是正确的吗?并将其与3进行比较,因为以我在EF方面的经验,在db上进行操作时几乎所有操作都更快。

PS我的环境中没有性能工具,也不确定如何测试它,因此是一个问题。

cl

您的查询正在编译并正在执行查询ToDictionary,因此1和2应该相同并且产生相同的查询:SELECT FieldA, FieldB FROM table ORDER BY FieldA在两种情况下都得到a

第三点是不同的:首先执行SQL查询(不带ORDER BY子句),然后对返回的内存集进行排序(数据不是由DB提供程序排序,而是由客户端排序)。这可能更快或更慢,具体取决于数据量,服务器和客户端的硬件以及数据库的设计方式(索引等),网络基础结构等等。

无法通过您提供的信息来判断哪个会更快

PS:这是没有意义的,因为aDictionary并不真正在乎顺序(我不认为3会编译,因为Dictionary<>,如果我没有记错的话,没有OrderBy),但是更改ToDictionaryToList,这就是你的性能答案

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

EF-Linq查询排序的最快方法是什么?

来自分类Dev

此联接的EF Linq查询的正确语法是什么

来自分类Dev

C#-LINQ to EF中此查询的语法是什么?

来自分类Dev

为什么选择linq到EF的EF方法对输出列表进行排序?

来自分类Dev

LINQ to EF子查询

来自分类Dev

抑制EF警告的正确方法是什么?

来自分类Dev

EF LINQ翻译:复杂查询

来自分类Dev

加快LINQ to EF查询的速度

来自分类Dev

为什么选择linq to EF的Select方法对输出列表进行排序?

来自分类Dev

EF Core 2.1 Linq查询到EF Core 3.0

来自分类Dev

在EF LINQ查询中使用字符串方法

来自分类Dev

EF和Linq除外

来自分类Dev

EF核心关系查询

来自分类Dev

EF扩展个案查询

来自分类Dev

EF Core包含查询

来自分类Dev

EF扩展个案查询

来自分类Dev

使EF生成的查询高效

来自分类Dev

重构EF查询的提示

来自分类Dev

传递 ef 查询以查看

来自分类Dev

EF查询很慢

来自分类Dev

用EF更新多对多的正确方法是什么?

来自分类Dev

在EF 6中更新子实体的正确方法是什么?

来自分类Dev

用EF5.0返回实体的最佳方法是什么?

来自分类Dev

EF Core中的AddorUpdate替代方法是什么?

来自分类Dev

在 ef core 2 中处理连接的最佳方法是什么

来自分类Dev

如何使LINQ to EF查询更高效

来自分类Dev

EF Core Linq上的子查询总和

来自分类Dev

在 Linq 查询 EF Core 中使用 Like

来自分类Dev

包装EF方法