oracle agg函数,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行的高成本,我希望纠正.这可能是此处完整扫描的结果,或者是连接的结果.

最佳答案 不使用索引的原因是存在空值的理论可能性. Null没有编入索引,因此如果您的查询需要/认为可能存在空值,则无法通过索引访问该表.

此外,您的提示必须与您的表格读取的级别相同:select /*+parallel(table_a)*/ ...

from (

select ...

from table_a

...

)

...

不行

但select ...

from (

select /*+parallel(table_a)*/ ...

from table_a

...

)

...

将工作.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值