我们假设我有一个具有VARCHAR类型的表的表.而且我需要从该字段中按字母顺序获取该表中的数据.
什么是最佳方法(性能):将字段添加到SQL查询中,或者在已经获取数据时对数据进行排序?
我使用Java(使用Hibernate),但我不能告诉任何有关DB引擎的事情.它可以是任何流行的关系数据库(如MySQL或MS sql Server或Oracle或Hsql DB或任何其他数据库).
表中的记录数量可能有很大差异,但假设有5k条记录.
UPD:二级休眠缓存(例如,EHCache)如何支持排序数据?
解决方法
如果该字段被索引,那么平均DB在这个任务中比Java更有效率.还要注意,如果它是纯粹的显示,通常不会一次检索所有这些行,而是检索它的一个子集,以便可以通过分页显示.您也可以在DB级别执行此操作.对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();