java - 在数据库中排序数据的优缺点?

标签 java database performance hibernate sorting

假设我有一个字段类型为 VARCHAR 的表。我需要从该表中按该字段的字母顺序排序的数据。

什么是最好的方法(为了性能):将按字段排序添加到 SQL 查询或在数据已经获取时对数据进行排序?

我正在使用 Java(与 Hibernate),但我无法说明任何关于数据库引擎的信息。它可以是任何流行的关系数据库(如 MySQL 或 MS Sql Server 或 Oracle 或 HSQL DB 或任何其他数据库)。

表中的记录数量可能变化很大,但我们假设有 5k 条记录。

UPD:二级 hibernate 缓存(例如 EHCache)对排序数据的支持程度如何?

最佳答案

如果这个字段被索引,那么普通的 DB 在这个任务上会比 Java 更有效率。另请注意,如果仅用于纯显示,您通常不会一次检索所有这些行,而是检索其中的一个子集,以便可以通过分页显示。您也可以在数据库级别执行此操作。在 Java 中对数据进行排序需要将整个表拖入 Java 的内存中,您不希望这样做。


在 Hibernate 中,您可以使用 Criteria#addOrder() 对结果进行排序并使用 Criteria#setFirstResult() 分页和 Criteria#setMaxResults() .例如

List users = session.createCriteria(User.class)
    .addOrder(Order.asc("username"))
    .setFirstResult(0) // Index of first row to be retrieved.
    .setMaxResults(10) // Amount of rows to be retrieved.
    .list();

关于java - 在数据库中排序数据的优缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2848688/

相关文章:

Java Matcher 慢速正则表达式

java - 不会更新值

java - org.apache.xml.security 在 Spring Boot 下不起作用

java - 使用 -cp 或 -classpath 手动设置 CLASSPATH 无法按预期工作

sql - 我如何在互联网上找到值得信赖的数据库帮助?

c - 归并排序的应用

java - 从 Java 中的 BufferedReader 对象中提取全部内容的最佳方法是什么?

java - 使用 Apache Common Math 实现 FFT

sql - 数据库事务——或者这是一个规范化问题?

r - 如何按组加速子集