假设我有一个字段类型为 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/