执行前重建查询

Posted

技术标签:

【中文标题】执行前重建查询【英文标题】:Rebuild Query before execution 【发布时间】:2017-04-25 10:43:01 【问题描述】:

我正在研究使用 jOOQ 作为可配置 JDBC 后端的抽象层。一个也是必需的选项是非常特定的数据库,它支持 JDBC,但它具有不常见的 SQL 方言。我需要使用这个数据库,但我想继续使用通用的 DSL 和 API。例如,我对使用 DSLContext.executeUpdate 调用很感兴趣。 我了解如何通过实施 DefaultExecuteListener 解决我一半的问题。但是还有另一半,我必须将 jOOQ 生成的一条语句转换为 DB 接受的另一条语句。我认为通过使用 DSL 操作这个任务应该比 SQL 修改更容易实现。 是否可以在 ExecutionListener 早期步骤(例如“开始”)中访问 DSL 构造,将其分解并将新的 DSL 构造注入后续步骤?

【问题讨论】:

【参考方案1】:

您正在寻找的是VisitListener SPI,它也记录在手册中:

http://www.jooq.org/doc/latest/manual/sql-building/queryparts/custom-sql-transformation/

【讨论】:

非常感谢您的回复。 VisitListener 似乎是正确的注入点。我保证我会关心实现的性能。 :) 至少要避免问“为什么 jOOQ 这么慢?”这样的问题。 ;) @Stinger.911:嗯,你确实想做高级的事情,所以要付出代价。还有:是的。请非常小心,让您的VisitListener 仅在需要/适用时才启动。

以上是关于执行前重建查询的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 索引重建手册

Sql 查询过慢,尝试重建索引

Laravel 在查询执行前利用时刻

DataGrip 只执行前 19 行 SQL 查询

SQL SEVER数据库重建索引的方法

MongoDB ensureIndex 是不是执行重建?