我有一个稍微复杂的Oracle查询,大约需要半个小时才能完成。如果我执行查询的慢速部分并单独运行它,它将在几秒钟内完成。这是隔离查询的SQL Monitor报告的屏幕截图:
作为完整查询的一部分运行时,这是相同的逻辑:
颜色与两个屏幕截图中的相同表格相对应。对于慢速查询,Oracle MERGE JOIN
在的两个表中没有相等条件的表之间执行JOIN
。结果,不必要地处理了大约1.5亿个中间行。
我可以通过查询提示或重写来解决此问题,但我想尽可能多地了解根本原因,以便将来避免该问题并可能向Oracle提交错误报告。每次我得到错误的计划UNPIVOT
时,查询文本中的内容都会转换为UNION ALL
计划中的一个。为了进一步调查,我想阻止查询转换的发生。我无法找到此转换的名称。我也无法找到阻止它的查询提示或下划线参数。我正在开发服务器上进行测试,因此一切正常。
有什么我可以做,以防止的查询转换UNPIVOT
到UNION ALL
?我使用的是Oracle 12.1.0.2。
由于IP原因,我无法共享查询,表名或数据。我无法提出一个简单的复制品。话虽如此,我仍不清楚为什么需要这些信息来回答这个问题。这是UNPIVOT查询以及与UNION ALL相同的查询的示例。
1
在您的示例中,所有均存在,因此显示。我运行了自己的查询,该查询没有所有并集,并且解释了计划没有显示所有并集。因此,可能是您的查询而不是造成问题的非透视操作?
—
拉吉
@Raj的重点是禁用该转换而不更改查询文本,以进一步缩小问题的范围。
—
Joe Obbish
我已经与Oracle合作多年,但是有时我需要查看查询或至少兼容的伪查询,并替换您的列/表。没有它,我可以继续猜测,但这对您和我都不有用。
—
拉吉