【发布时间】:2023-03-18 05:20:01
【问题描述】:
相比11g,12c(目前使用12.1.0.2版本)在keyword中速度太慢了。
SELECT * FROM
DATA_TABLE WHERE
OID IN (
SELECT OID FROM ID_TABLE WHERE (condition)
)
结果
11g : 不到 1 秒
12c:超过 10 秒
以下查询在 11g 和 12c 中都足够快(让您知道真正的问题是 'in subquery' 查询
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 秒
或
SELECT * FROM
DATA_TABLE WHERE
OID IN (
"AA", "BB", "CC", "DD, "EE"
)
结果
11g : 不到 1 秒
12c : 不到 1 秒
问题仅在“子查询中”。 INDEX 制作精良的两个表。 有人解决了这个问题吗?
【问题讨论】:
-
问题不在 IN 子句中,但在此查询中可能是 SELECT OID FROM ID_TABLE WHERE(条件)。因此,为 ID_table 结构提供索引详细信息。表中有多少行,您可以尝试使用带 OID 的 DISTINCT 键。
-
我现在无法提供结构,但我可以看出 SELECT OID FROM ID_TABLE WHERE(条件)与 11g 的响应速度相同。我会尝试 DISTINCT 关键字 tmrw 谢谢
-
只是为了消除这种可能性,您能否将
SELECT OID FROM ID_TABLE替换为SELECT ID_TABLE.OID FROM ID_TABLE并确认您获得相同的性能结果? -
我想我挖错了点。我发了新帖子,请检查一下。 stackoverflow.com/questions/34623779/