暂无图片
_optimizer_mjc_enabled含义
我来答
分享
Uncopyrightable
2021-10-29
_optimizer_mjc_enabled含义

在sql优化过程中有的建议将优化器的mjc特性关闭,为了HINT避免MERGE JOIN?或者防止笛卡尔积?

生成过程中是否建议这么操作?还是按照默认配置?


instance禁用

alter system set "_optimizer_mjc_enabled" = false;

session禁用

alter session set "_optimizer_mjc_enabled" = false;

sql添加 hint

select/*+ OPT_PARAM('_optimizer_mjc_enabled','false') */

我来答
添加附件
收藏
分享
问题补充
1条回答
默认
最新
文成


Description

If the optimizer_index_caching and optimizer_index_cost_adj parameters are 
set to non-default values the optimizer may select a  merge join cartesian
even if hints are specified for other joins. This can occur as CBO
costs the MERGE JOIN as if it was a nested loops without any keys and so
the parameters incorrectly affect the merge join costing.
 
Eg:
    select /*+ use_hash (a) use_hash (b) use_hash (c) */
      a.id
    from look_up a
    inner join look_up b on (a.id = b.id)
    inner join look_up c on (b.id = c.id)
    where a.text = 'aa'
    and b.text = 'bb'
    and c.text = 'cc'
    ^
 
    | 0   | SELECT STATEMENT       |           |       |       |     6 |      
    | 1   |  HASH JOIN             |           |     2 |    36 |     6 |  
    | 2   |   INDEX RANGE SCAN     | LOOK_UP_UK|   100 |   600 |     1 |  
    | 3   |   MERGE JOIN CARTESIAN |           |   20K |  234K |     4 |  
    | 4   |    INDEX RANGE SCAN    | LOOK_UP_UK|     2 |    12 |     1 |  
    | 5   |    BUFFER SORT         |           |   10K |   59K |     3 |  
    | 6   |     INDEX RANGE SCAN   | LOOK_UP_UK|   10K |   59K |     1 |  
 
    Predicate Information:
    ----------------------
    1 - access("B"."ID"="C"."ID" AND "A"."ID"="B"."ID")
    2 - access("B"."TEXT"='bb')
    4 - access("A"."TEXT"='aa')
    6 - access("C"."TEXT"='cc')
 
Workaround
  Set "_optimizer_mjc_enabled"=false;
暂无图片 评论
暂无图片 有用 0
暂无图片
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏