当前位置: 首页 > 面试题库 >

在jOOQ和PostgreSQL中优化了数组吗?

昝枫
2023-03-14
问题内容

我有一大堆标识符,我想将其添加到WHERE子句中,如下所示:

identifier IN (..., ..., ..., ...)

但是,这非常慢,因为它必须分别绑定每个值。请记住,列表很长(几乎1000个值)。在这种情况下,最好使用:

identifier = ANY({..., ..., ..., ...})

现在,我们只绑定一次数组。

我尝试在jOOQ中这样做:

Integer[] values = {..., ..., ..., ...}
DSL.any(DSL.array(values))

生成以下SQL:

"identifier" = any (array[?, ?, ?, ...])
TRACE | 2017-08-24 10:02:08,914 | JooqLogger.java | 187 | Binding variable 1       : ...
TRACE | 2017-08-24 10:02:08,947 | JooqLogger.java | 187 | Binding variable 2       : ...
TRACE | 2017-08-24 10:02:08,958 | JooqLogger.java | 187 | Binding variable 3       : ...
...

因此,这使我得出结论,我们仍在分别绑定每个值?有没有办法对此进行优化?


问题答案:

更换:

DSL.any(DSL.array(values));

带有:

DSL.any(values);

创建单个绑定变量。

或者,您可以显式创建该绑定变量:

Field<Integer[]> array = DSL.val(values);
DSL.any(array);


 类似资料:
  • 我有一项任务,我必须参加一个项目,使其在时间方面更有效率。原始代码为: 我几乎完全修改了第二个for循环,将其改为 这本身就能够将时间缩短到标准…它似乎已经起作用了,但有什么我没有看到的错误吗?

  • 问题1[主]:是否可以优化? 我尝试过:避免使用非常大的数字的操作。所以我决定使用辅助数据。例如,我将转换为,其中。 问题:但是似乎比快十倍。这里是我的测试:

  • 我正在创建一个应用程序,对jOOQ的当前状态有点困惑。这是我第一次使用jOOQ处理所有东西,包括CRUD,所以我可能会遗漏一些东西。 我知道DAO和POJO可能会被弃用,但是,我不知道如何在数据库优先的设计中处理这个问题。 我能做的最简单的事情就是创建我自己的Pojos,但是我们又回到了通常的JPA实体文件,如果数据库发生了变化,这些文件将无法正确地与记录映射。 1)弃用生成pojos是否意味着我

  • 问题内容: 我在PostgreSQL类型上使用%%运算符,该运算符将hstore(有效键值类型)转换为元素交替为{{key,value},{key value}}的数组。 当我想返回这些平坦的hstore的数组时,出现此错误:由于PostgreSQL缺乏对数组数组的支持。 从好奇心的角度来看,有人知道为什么不支持这些吗?更重要的是,这种情况是否可以解决? 目前,我将结果串联成一个字符串(用逗号分隔

  • 问题内容: 我有一个执行简单的sql select语句的sql函数: 现在,我正在像这样调用此函数: 如果我需要使用order byandlimit子句对结果进行排序和限制,我有哪些选择? 我猜这样的查询: 效率不是很高,因为表中的所有行都stuff将由函数返回,getStuff然后才按限制排序和切片。 但是,即使我是对的,也没有简单的方法来通过sql语言函数的参数传递命令。只能传递值,不能传递s

  • 我用来计算这个月的时间,这在两个表中很常见,即和。 但在表2中,我有日期和月份。 我还在表1上创建了一个索引。如果我只写相同的查询表1,我得到的结果在1000ms内。 我取值的总和,并使用左连接组合结果。 问题是这样的。 解释问题: 目前,我在表1中大约有500k行。 每天我都会更新表,将大约3到4k记录更新到表1。 查询一直在运行。 我没有得到任何结果。 谁能告诉我哪里出了问题吗?