领域查询顺序是不是一致?

Posted

技术标签:

【中文标题】领域查询顺序是不是一致?【英文标题】:Is realm query order consistent?领域查询顺序是否一致? 【发布时间】:2020-02-19 15:29:06 【问题描述】:

在没有明确排序的情况下查询领域数据库时,我可以依赖结果中的给定顺序吗?是插入顺序吗?首要的关键?最近更新时间?示例如下:

var results = Realm.All<MyRecord>().Where(i => i.MyProp == "in the wild wild west");
foreach (var result in results)

  // do a thing with the record

我需要一个一致的顺序,但我不想通过“明确”的顺序来增加开销,因为这会增加搜索开销,只要领域的结果是一致的(假设数据库没有变化)我很高兴使用领域给出的默认顺序。

【问题讨论】:

添加单个属性来保证排序是极少量的数据,与保证您想要的顺序相比,不会真正增加任何有影响的开销。 虽然我在很大程度上同意你的观点,但我正在批量插入大约 4m 记录,这种数据量的开销确实会变得很明显,如果可以添加这个,那就太可惜了依靠,如果有必要,我真的很感激理解 我不会依赖 Realm 的“自然排序”来做任何事情。更重要的是,如果曾经插入或修改过数据,那么排序就会消失。所以有两件事 List 属性可以保证保持它们的插入顺序。 所以你可以依靠它。部分问题还源于在没有设置顺序的情况下重新读取数据:出于性能原因,不保证保留结果插入顺序。这意味着当您读取结果时,除非您定义它,否则没有保证顺序。 干杯让我明白了,不幸的是,我将选择显式排序,这可能意味着我正在使用的数据集大小的查询开销。谢谢 【参考方案1】:

我不会依赖 Realm 的“自然排序”来做任何事情。更重要的是,如果曾经插入或修改过数据,那么排序就会消失。

两件事

保证列表属性保持其插入顺序。

这样您就可以放心了。部分问题还源于在没有设置顺序的情况下重新读取数据:

出于性能原因,不保证结果插入顺序 保存下来。

这意味着当您读取结果时,除非您定义它,否则没有保证顺序。

【讨论】:

从技术上讲,如果您删除对象,订单就会开始分崩离析。 @EpicPandaForce 这有点不清楚。哪个排序? OP所指的“自然顺序”还是其他?我应该更新/澄清答案吗?如果是这样,您能否稍微扩展一下您的意思,以便我修改答案? 插入顺序一直保留,直到您从 Realm 中删除一个对象,此时 Realm 中的最后一个项目(或某些项目,实际上)占据了它的位置,然后突然您没有插入顺序了。但默认顺序实际上只在删除时更改。

以上是关于领域查询顺序是不是一致?的主要内容,如果未能解决你的问题,请参考以下文章

union all ,union 注意事项,查询结果集中的字段名称顺序必须一致

124复习前一天的内容

Mysql数据查询in的时候如何排序

Mybatis 查询的结果集,列的顺序如何去控制

Mysql联合查询语句语法

MySql:联合查询