java - Java / QueryDSL 中的行构造函数比较查询生成
问题描述
我正在尝试在使用 QueryDSL / JPA 生成查询的 Java 存储库中为 postgresql 数据库实现键集分页。通常的模式是使用BooleanBuilder
querydsl 类来构造查询,然后使用repository.findAll
该查询。
就我而言,理想情况下,我想生成的查询将使用行构造函数语法,即
select * from table
where (col1, col2) < (val1, val2)
order by col1 desc col2 desc offset n;
但是,据我所知,querydsl 不支持这种语法。为了解决这个问题,我将上述查询转换为其逻辑等价物,即
select * from table
where col1 < val1 or (col1 = val1 and col2 < val2)
order by col1 desc col2 desc offset n;
事实证明,在 (col1, col2) 上使用联合索引时,行构造函数语法比其逻辑等效语法(在具有 300k 记录的表上,查询大约 5ms 对 175ms)的性能要好得多。
我更喜欢使用某种查询构建库来生成我的查询,因为有许多其他非必需参数使得为每种情况编写本机查询变得站不住脚。任何人都知道使用类似的方法来做到这一点BooleanBuilder
,还是我坚持使用性能较低的查询 dsl 实现或几个粗略的本机查询?
解决方案
推荐阅读
- wordpress - 在外部 APP 上触发 Elementor Popup(登录弹出窗口)
- python-3.x - 乘法返回错误(TypeError: 'int' object is not subscriptable)
- linux - 无法获取当前进程的 UID 的密码数据库信息:用户“???” 未知或没有内存来分配密码条目
- python - 在 Python Pandas 中聚合数据
- linux - Linux - 在脚本外壳中传递密码
- c# - 在 ASP.NET Core Blazor 中使用 MongoDB 作为服务
- bash - 如何更改 shell 中的命令?
- android - 在 AOSP 源代码中添加系统应用程序(通过 App 源代码/工作 AS 项目)
- c++ - 链接到静态库中的 explicit_bzero (glibc)
- vhdl - Vivado 在综合过程中完全消除了设计 - 可能存在约束问题