我有以下查询:
SELECT
a, b, value
FROM
table
WHERE
a = :a AND b = :b
我必须为N = 10000 +不同的(a,b)对选择一个值。
最简单的解决方案是进行N个单一查询,但它从性能POV中消失。对于这种情况,什么是更优化的解决方案?
答案 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。有用。但是如此懒散......至少在我的家庭测试系统上。