JOOQ慢代码生成

时间:2017-03-21 13:34:31

标签: java sql jooq

是否有任何参数可以在jooq代码生成期间打开/关闭下一个查询的执行?

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

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

1 个答案:

答案 0 :(得分:1)

jOOQ运行的查询的一个主要问题是qcut = function(x, n) { quantiles = seq(0, 1, length.out = n+1) cutpoints = unname(quantile(x, quantiles, na.rm = TRUE)) as.character(cut(x, cutpoints, include.lowest = TRUE)) } dt[, bin2 := qcut(A, 3), by = B] # A B bin bin2 # 1: 1 1 [1,4] [1,2.33] # 2: 2 1 [1,4] [1,2.33] # 3: 3 1 [1,4] (2.33,3.67] # 4: 4 1 [1,4] (3.67,5] # 5: 5 1 (4,7] (3.67,5] # 6: 6 2 (4,7] [6,7.33] # 7: 7 2 (4,7] [6,7.33] # 8: 8 2 (7,10] (7.33,8.67] # 9: 9 2 (7,10] (8.67,10] #10: 10 2 (7,10] (8.67,10] 表达式。这是在jOOQ 2.4(#1418)中引入的,以防止用户意外使用小写模式名称的错误配置。该功能基于错误的假设,即区分大小写的用户是不可能的。它们肯定是可能的(即使很少见),所以#1418错了。我为这个问题创建了两个问题:

  • #5989:通过避免UPPER(OWNER)
  • 上的功能来解决性能问题
  • #5990:重新制定区分大小写的架构名称

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

Pre jOOQ 3.8

您始终可以覆盖jooq-codegen中的OWNER并重新实现包括JavaGeneratorgeneratePackages()在内的某些方法为空。这样,根本不会执行相关代码。

当然,这意味着您将无法获得任何生成的包和例程。

发布jOOQ 3.8

有一个新配置选项,您可以在其中以上述方式进行配置:

generateRoutines()

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