暂无图片
_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
打赏 0
暂无图片
回答交流
Markdown


请输入正文
提交
相关推荐
Oracle中的多版本读一致性的含义?
回答 2
已采纳
Oracle多版本控制是一个好东西,它不仅能提供一致(正确)的答案,还有高度的并发性。Oracle数据库的查询是从缓存获取块,每次从缓冲区获取一个块时,都完成这样一个检查:“这个块是不是太新了?如果是
数据库 着急
回答 3
简单手写了下,没建表。可能要调试存储需要调用,不能直接接收输入,采用匿名代码块方式setserveroutputon;ACCEPTOIDNUMBERPROMPT'请输入医生ID:';ACCEPTOPv
以下关于 ORACLE 缓冲池的描述,正确的是?
回答 1
已采纳
正确选项:ABD
定时任务如何调出一个select脚本的结果
回答 2
bdump$ORACLEHOME/bin/sqlpluss"/assysdba"<<EOFsetheadingofffeedbackoffverifyoffselect
oracle 等待事件Data file init write
回答 1
等待事件"Datafileinitwrite"表示正在等待数据文件初始化写入完成。当数据库扩展数据文件时,可能需要进行一些初始化工作,这包括在文件中预分配一些空间,以便在将来的写入操作中使用。这通常是
DSG占用物理读很高
回答 2
已采纳
dsg不都是原厂服务的吗?直接找原厂哇
Oracle 19C:其中一个pdb是受限模式,怎么修改呢?
回答 1
已采纳
受限模式一般是打完patch,更新数据字典失败或者未更新,重新打开PDB才会出现的模式。可尝试重新更新数据字典!指定PDB进行字典更新:cd$ORACLEHOME/OPatch./datapatchv
有没有 Oracle 19c in-memory使用案例?
回答 1
看看这个https://blog.csdn.net/weixin34149824/article/details/116411697?spm1001.2101.3001.6661.1&utmm
oracle 11g单机生成许多users 数据文件 undo数据文件也很大
回答 4
我下午准备讲这些图片表在这个库删除或者转移看看还会不会生成user21.dbfuser22.dbf…等等数据文件且一个32G,感谢老师回复
oracle 数据库 某条语句第一次执行比较慢,后面就执行很快了,怎么能设置每次都执行很快
回答 1
你得理解为啥第一次执行比较慢,因为涉及到解析生成执行计划,读取数据到内存,如果要每次执行都很快,就把每次定义成第二次,那么每次就都很快。另外可以分配较大的内存,将常用对象keep到内存中,使用更好的性