where子句中的Oracle rowid导致新Oracle 12c安装的优化器成本较高

时间:2015-12-21 19:20:37

标签: sql oracle optimization rowid

我希望这里的社区可以帮助我解决我们在从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,一切都很好。成本从数百万到数万。

有什么可能导致这种情况的问题?非常感谢您的提前思考。

0 个答案:

没有答案