与11g相比,12c(目前使用12.1.0.2版本)的关键字非常慢。
SELECT * FROM
DATA_TABLE WHERE
OID IN (
SELECT OID FROM ID_TABLE WHERE (condition)
)
结果
11g:1秒内
12c:超过10秒
以下查询在11g和12c中都足够快(让你知道真正的问题是在子查询'查询中
SELECT OID FROM ID_TABLE WHERE (condition)
我可以通过更改查询解决此问题,如下所示
SELECT * FROM
DATA_TABLE D,
(
SELECT OID FROM ID_TABLE WHERE (condition)
) O
WHERE D.OID = O.OID
结果
11g:1秒内
12c:1秒内
OR
SELECT * FROM
DATA_TABLE WHERE
OID IN (
"AA", "BB", "CC", "DD, "EE"
)
结果
11g:1秒内
12c:1秒内
问题仅出现在子查询'中。 INDEX很好地制作了两个表。 有人解决了这个问题吗?
答案 0 :(得分:0)
你必须提供解释计划,以更好地评估为什么一个人的表现比另一个好。但是,通常情况下,通过将IN
条件更改为EXISTS
条件,您可以为此类查询获得更好或至少更具可预测性的结果:
select *
from data_table t1
where exists (select null
from id_table t2
where t2.oid = t1.oid
and (other conditions))