目前我有一个实现,它可以获取10万条记录,持续10-12秒。这个查询的性能可以提高,如何?以下是基于QueryDSL和JPA 2的代码片段。
public List<EntryEntity> getEntries() {
QEntryEntity qEntryEntity = QEntryEntity.entryEntity;
return queryfactory.selectFrom(qEntryEntity).orderBy(qEntryEntity.name.asc()).fetch();
}
答案 0 :(得分:3)
您可能错过了NAME
列的索引:
CREATE INDEX solve_all_problems ON entry_entity (name);
这很有效,因为索引预先订购了所有数据,因为它是一个有序的数据结构,因此当您运行类似于您现在正在运行的查询时,数据库不再需要执行任何订购工作。 Use-the-index-luke has a nice explanation on this topic
旁注:添加索引时要小心。虽然它们大大加快了读取操作,但每个索引都会减慢该列上的写入操作。每个指数都是权衡。