如何使用JPA 2和QueryDSL有效地获取数千个数据库记录?

时间:2017-06-16 08:26:49

标签: java spring-data spring-data-jpa querydsl

目前我有一个实现,它可以获取10万条记录,持续10-12秒。这个查询的性能可以提高,如何?以下是基于QueryDSL和JPA 2的代码片段。

public List<EntryEntity> getEntries() {

QEntryEntity qEntryEntity = QEntryEntity.entryEntity;

return queryfactory.selectFrom(qEntryEntity).orderBy(qEntryEntity.name.asc()).fetch();
}

1 个答案:

答案 0 :(得分:3)

您可能错过了NAME列的索引:

CREATE INDEX solve_all_problems ON entry_entity (name);

这很有效,因为索引预先订购了所有数据,因为它是一个有序的数据结构,因此当您运行类似于您现在正在运行的查询时,数据库不再需要执行任何订购工作。 Use-the-index-luke has a nice explanation on this topic

旁注:添加索引时要小心。虽然它们大大加快了读取操作,但每个索引都会减慢该列上的写入操作。每个指数都是权衡。