Aar*_*son 5 java postgresql jpa querydsl
我正在尝试在使用 QueryDSL / JPA 生成查询的 Java 存储库中为 postgresql 数据库实现键集分页。通常的模式是使用BooleanBuilderquerydsl 类构建查询,然后repository.findAll与该查询一起使用。
就我而言,理想情况下我想要生成的查询将使用行构造函数语法,即
select * from table
where (col1, col2) < (val1, val2)
order by col1 desc col2 desc offset n;
Run Code Online (Sandbox Code Playgroud)
然而,据我所知,querydsl 不支持这种语法。为了解决这个问题,我将上面的查询转换为其逻辑等效项,即
select * from table
where col1 < val1 or (col1 = val1 and col2 < val2)
order by col1 desc col2 desc offset n;
Run Code Online (Sandbox Code Playgroud)
事实证明,使用 (col1, col2) 上的联合索引,行构造函数语法比其逻辑上等效的语法性能要高得多(在具有 300k 记录的表上,查询时间约为 5 毫秒 vs 175 毫秒)。
我更喜欢使用某种查询构建库来生成查询,因为有许多其他非必需参数使得为每种情况编写本机查询变得站不住脚。任何人都知道使用类似的方法来做到这一点BooleanBuilder,或者我是否坚持使用性能较差的查询 dsl 实现或几个粗略的本机查询?
| 归档时间: |
|
| 查看次数: |
216 次 |
| 最近记录: |