jOOQ是处理缓慢的数组吗?

时间:2018-09-13 23:50:01

标签: postgresql jooq

我有一个SQL查询,当与jOOQ一起运行时,需要1分钟10秒才能完成,但是直接在数据库中执行时只需要4秒。

在两种情况下,我都确保它与我用psql执行的语句是相同的SQL,是从jOOQ记录的语句中复制的,然后再执行它。

jOOQ代码的相关部分是:

...
and(arrayOverlap(MY_TABLE.MY_FIELD, val(uuid_array)))
...

生成一个包含以下内容的PostgreSQL语句

...
("schema"."my_table"."my_field" && cast('{...}' as uuid[])
...

通过将之前的代码更改为:

,我们设法使jOOQ快速执行此代码。
final String myItems = myField.stream()
                              .map(UUID::toString)
                              .collect(joining("\",\""));

然后:

and(condition("{0} && '{\"" + myItems + "\"}'::uuid[]", MY_TABLE.MY_FIELD));

因此,我传递的值与jOOQ自己构造的值完全相同,但是对于jOOQ来说,它只是一个字符串。

jOOQ为什么缓慢执行此查询?除了我所做的以外,还有其他选择吗? (我不想像这样自己构造SQL。)

BTW:我看了一下这个other issue,但是在我生成的SQL中,我认为我正在使用单个绑定变量,因为我已经在使用val包装数组。

0 个答案:

没有答案