我希望这里的社区可以帮助我解决我们在从Oracle 11g迁移到Oracle 12c时遇到的一个有趣问题。
我们有一个由Informatica PowerCenter执行的查询,在我们升级到12c后需要很长时间。研究表明,执行计划在11g和12c之间有所不同。我们更新了表格和索引统计信息,但它没有帮助。我们将罪魁祸首追溯到引用WHERE
的{{1}}条款。
这是相当简短的,但导致问题的查询的结果如下:
ROWID
我更改了查询以使用SELECT *
FROM (SELECT t1.*,
FIRST_VALUE(rowid) OVER (PARTITION BY c1, c2
ORDER BY DECODE(c3, 'A', 'A', 'B', 'B', 'Z'), c3 DESC) AS max_rowid
FROM t1)
WHERE max_rowid <> rowid
分析函数而不是RANK
,一切都很好。成本从数百万到数万。
有什么可能导致这种情况的问题?非常感谢您的提前思考。