gpt4 book ai didi

sql - Java 8 流与 jpa postgresql 排序依据。什么对性能更好?

转载 作者:行者123 更新时间:2023-11-29 13:26:44 25 4
gpt4 key购买 nike

我正在将 jpa entitymenager 与 postgresql 和 java 8 一起使用。我需要按名称显示一些数据顺序。

什么更快,性能更好:

查询数据库

@Query("select t from Table t order by t.someField ") 

或者只是从数据库中获取所有记录并使用 java 8 stream api 对它们进行排序

 someCollection.stream().sorted((e1, e2) -> e1.getSomeField()
.compareTo(e2.getSomeField())).

最佳答案

一般来说,如果您可以使用 SQL 进行排序,那就继续吧。如果你的排序列被索引,那么排序将是微不足道的:PostgreSQL 将只读取这个已经包含结果顺序的索引。即使您的排序列没有被索引,DBMS 也可以更有效地完成它。例如,在 DBMS 中排序时不需要将整行保存在内存中,您只需要来自已排序列和行 ID 的值。在获得正确排序的行 ID 列表后,您可以将行以流方式发送到客户端。此外,当对非常大的表进行排序时,DBMS 可能会将一些数据转储到硬盘以减少内存使用量。

请注意,DBMS 排序是在 DBMS 端执行的,它可以是完全不同的服务器,因此最终速度还取决于 DBMS 服务器或应用服务器是否更强大或目前有更多可用资源。

如果您想在 Java 中对结果进行排序,可能最好使用 someCollection.sort(Comparator.comparing(e -> e.getSomeField())) 进行就地排序(假设您的 someCollectionList)。这将减少消耗的内存和复制数据的次数。就地排序对于像 ArrayList 这样的基于数组的列表是最有效的。

还应注意,排序结果可能会有所不同,因为它们可能取决于当前的 DBMS 排序规则(在 Java 中,您只需按 UTF-16 代码点值对字符串进行排序,除非使用自定义 Collator)。

关于sql - Java 8 流与 jpa postgresql 排序依据。什么对性能更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32518780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com