为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:
【操作系统】:
【CPU】:
【问题描述】:如下sql,oracle迁移到达梦,oracle只需要3s,达梦2分钟执行不出结果
select *
from ( select a.,
ROWNUM rnum
from ( select distinct RES.*,
VAR.ID_ as VAR_ID_,
VAR.NAME_ as VAR_NAME_,
VAR.VAR_TYPE_ as VAR_TYPE_,
VAR.REV_ as VAR_REV_,
VAR.PROC_INST_ID_ as VAR_PROC_INST_ID_,
VAR.EXECUTION_ID_ as VAR_EXECUTION_ID_,
VAR.TASK_ID_ as VAR_TASK_ID_,
VAR.BYTEARRAY_ID_ as VAR_BYTEARRAY_ID_,
VAR.DOUBLE_ as VAR_DOUBLE_,
VAR.TEXT_ as VAR_TEXT_,
VAR.TEXT2_ as VAR_TEXT2_,
VAR.LAST_UPDATED_TIME_ as VAR_LAST_UPDATED_TIME_,
VAR.LONG_ as VAR_LONG_
from MCC_ACT_HI_TASKINST RES
left outer join MCC_ACT_HI_VARINST VAR
ON RES.ID_ = VAR.TASK_ID_
or (RES.PROC_INST_ID_ = VAR.EXECUTION_ID_
and VAR.TASK_ID_ is null)
inner join MCC_ACT_RE_PROCDEF D
on RES.PROC_DEF_ID_ = D.ID_
WHERE D.KEY_ = 'workorder_firstReception'
and RES.ASSIGNEE_ = 'YUBN001'
and RES.END_TIME_ is null
and RES.TENANT_ID_ = 'default'
order by RES.START_TIME_ desc,
VAR.LAST_UPDATED_TIME_ asc ) a
where ROWNUM < 20001)
where rnum >= 1;
执行计划如下
加hint enable_hash_join(0)之后,执行还需要40s左右,执行计划如下:
et耗时
把里面一个条件is null 去掉之后,很快就执行完成
加个这个hint OPTIMIZER_OR_NBEXP(2)看下效果