spring jpa +休眠-querydsl limit()非常慢

时间:2019-07-15 01:22:42

标签: spring oracle hibernate jpa querydsl

我想从第5000000条记录(id = 5000000)中选择余额低于100的25行,然后在oracle db中执行以下操作:

select a.acc_id, a.first_name, a.last_name, b.balance from account a join balance b on a.acc_id = b.acc_id where a.acc_id >= 5000000 and b.balance < 100 order by a.acc_id asc fetch first 25 rows only;

上面的查询运行很快,没有问题。但是,当我尝试将其转换为querydsl代码时:

jpaQueryFactory
.select(a.accId, a.firstName, a.lastName, b.balance)
.from(qAccount)
.join(qBalance).on(qAccount.accId.eq(qBalance.accId))
.where(qAccount.accId.goe(5000000)
.and(qBalance.balance.lt(100)))
.orderBy(qAccount.accId.asc())
.limit(25)
.fetch();

生成的查询变成这样:

select * from ( select a.acc_id, a.first_name, a.last_name, b.balance from account a inner join balance b on ( a.acc_id = b.acc_id ) where a.acc_id >= 5000000 and ( b.balance < 100 ) order by a.acc_id asc ) where rownum <= 25;

查询也可以,但是非常慢。 (我认为)这是因为它获取ID为5000000后的所有记录并切出前25行。

是否有防止这种情况的方法,以便查询可以像我使用的第一个查询一样快速运行?

0 个答案:

没有答案