JOOQ 慢速代码生成

JOOQ slow code generation

在jooq代码生成过程中,是否有任何参数可以on/off执行下一个查询?

SELECT "SYS"."ALL_OBJECTS"."OWNER",
     "SYS"."ALL_OBJECTS"."OBJECT_NAME",
     "SYS"."ALL_OBJECTS"."OBJECT_ID",
     "SYS"."ALL_PROCEDURES"."AGGREGATE"
FROM "SYS"."ALL_OBJECTS"
     LEFT OUTER JOIN "SYS"."ALL_PROCEDURES"
        ON (    "SYS"."ALL_OBJECTS"."OWNER" =
                   "SYS"."ALL_PROCEDURES"."OWNER"
            AND "SYS"."ALL_OBJECTS"."OBJECT_NAME" =
                   "SYS"."ALL_PROCEDURES"."OBJECT_NAME")
WHERE (    UPPER ("SYS"."ALL_OBJECTS"."OWNER") IN ( 'MYSCHEMA')
      AND "SYS"."ALL_OBJECTS"."OBJECT_TYPE" IN ( 'FUNCTION', 'PROCEDURE'))
ORDER BY "SYS"."ALL_OBJECTS"."OWNER" ASC,
     "SYS"."ALL_OBJECTS"."OBJECT_NAME" ASC,
     "SYS"."ALL_OBJECTS"."OBJECT_ID" ASC

在具有大量模式和对象的数据库上执行大约需要一个小时

jOOQ 查询 运行 的一个主要问题是 UPPER(OWNER) 表达式。这是在 jOOQ 2.4 (#1418) 中引入的,以防止用户意外使用小写模式名称的错误配置。该功能基于一个错误的假设,即区分大小写的用户是不可能的。它们当然是可能的(即使很少见),所以#1418 是错误的。我为这个问题创建了两个问题:

  • #5989:通过避免 OWNER
  • 上的函数来解决性能问题
  • #5990:重新制定区分大小写的模式名称

与此同时,您有一些可能的解决方法:

jOOQ 3.8 之前

你总是可以从 jooq-codegen 覆盖 JavaGenerator 并重新实现一些方法,包括 generatePackages()generateRoutines() 为空。这样,相关代码就完全不会执行了。

当然,这意味着您不会得到任何生成的包和例程。

Post jOOQ 3.8

有一个新的配置选项,您可以在其中进行与上面相同的配置:

<configuration>
  <generator>
    <database>
      <includeRoutines>false</includeRoutines>
      <includePackages>false</includePackages>
      ...

另请参阅: https://www.jooq.org/doc/latest/manual/code-generation/codegen-advanced/codegen-config-include-object-types