通过多列查询数据库中的许多值

时间:2015-01-14 14:56:54

标签: sql database oracle jdbc

我有以下查询:

SELECT
  a, b, value
FROM
  table
WHERE
  a = :a AND b = :b

我必须为N = 10000 +不同的(a,b)对选择一个值。

最简单的解决方案是进行N个单一查询,但它从性能POV中消失。对于这种情况,什么是更优化的解决方案?

2 个答案:

答案 0 :(得分:2)

SELECT
  a, b, value
FROM
  table
WHERE
  (a ,b) in ((a1,b1),(a2,b2),(a3,b3),(a4,b4),(a5,b5)...(an,bn)) 

答案 1 :(得分:2)

由于您无法创建临时表,可能使用CTE而不是?

WITH cte AS ( SELECT 'a1' a, 'b1' b FROM DUAL
              UNION ALL SELECT 'a2' a, 'b2' b FROM DUAL
              UNION ALL SELECT 'a3' a, 'b3' b FROM DUAL
              ..
)
SELECT * FROM T JOIN cte USING (a,b)

我不记得曾经使用了10000多行CTE(可能不是1000年代的事件)。我不知道这个规模井。无论如何,关于表演,如果没有合适的索引,你可能无法真正希望得到快速的东西。


事实上,我刚刚在Oracle XE 11g上测试过它:你可以使用超过10000行的cte。有用。但是如此懒散......至少在我的家庭测试系统上。