使用大“IN”子句优化 Oracle SQL

Neo*_*liw 6 java sql oracle optimization query-optimization

在这里我有一个如下查询:

SELECT field
FROM table
WHERE value IN ('val1', 'val2', 'val3', ... 'valn')
Run Code Online (Sandbox Code Playgroud)

假设 IN 子句中有 2000 个值,该值在其他表中不存在。您有什么想法可以加快此操作吗?

这个问题是开放的,可以接受任何类型的方法。

谢谢!

Mit*_*eat 5

  1. 创建一个涵盖“字段”和“值”的索引。

  2. 将这些 IN 值放入临时表中并加入它。


TTT*_*TTT 0

这看起来像是 Java 中的正确方法:http ://knol.google.com/k/oracle-passing-a-list-as-bind-variable#

它类似于 C# 解决方案。您的值列表保留在内存中(没有临时表),并且不会保留到磁盘,并且您使用参数化查询,因此查询执行器不必重新解析每个查询。我没有用java尝试过,但我认为它会很快。

  • 上面的链接已失效。 (3认同)