xmlagg去掉最后分隔符oracle,sql - Oracle优化器提示xmlagg函数 - 堆栈内存溢出

我有一个函数,它使用一些xmlaggs数据调用几个表/视图等。

出于某种原因,当我提取额外信息时,我的性能会提高,即使这些额外信息不用于其余代码(例如再次使用键值的索引)。

我已经对快速和慢速运行tkprof并且我看到了一些问题 - 第一个是在解析和执行期间慢速查询未命中而快速查询没有。

我的主要问题是向下看,我可以看到我的一个视图的高成本 - 更快的查询使用基础表上的3个索引,而慢速查询不使用任何。

我试图插入一个提示:

SELECT /*+ index(view_alias,table1_index, table2_index, table3_index) */

XMLCONCAT (...

但它仍在进行全表扫描。 我是将优化器提示放在错误的位置还是使用了错误的语法?

编辑 - 我一直在做更多的调查,看起来它可能是来自Oracle做一个哈希连接而不是一个嵌套循环,但是我的选择来自几个表 - 我可以强制所有3上的USE_NL吗? 我如何知道pl / sql的哪个区域导致这种情况,因为它被多次调用。

更新28/08 - Bounty补充道。 如果有任何额外要求,请告诉我。

更新01/09 -

> SELECT XMLCONCAT ( XMLELEMENT ( "1", (SELECT XMLCONCAT( XMLELEMENT

> ( "2", XMLELEMENT ( "3", XMLFOREST ( )), CASE WHEN THEN

> XMLELEMENT ( "3", XMLFOREST ( )) END), /* (SELECT XMLELEMENT (

> "4", XMLAGG (XMLELEMENT ("5"))) FROM TABLE t1, t2 WHERE t1.col1 =

> t2.col2) ,*/ CASE WHEN THEN (SELECT XMLAGG ( XMLELEMENT (

> "5", */(SELECT col1 FROM TABLE t1, t2 WHERE t1.col1 = t2.col2),*/

> XMLFOREST ( ....

有两个注释掉的选项,当EITHER被取消注释时,它会使其成为执行速度更快的查询。 t1和t2根本不在查询的其他地方使用。

这是86行的高成本,我希望纠正。 这可能是此处完整扫描的结果,或者是连接的结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值