加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – Oracle 11g – 如何优化慢速并行插入选择?

发布时间:2020-12-12 06:51:22 所属栏目:MsSql教程 来源:网络整理
导读:我们想加快下面的并行插入语句的运行.我们期望插入大约80M的记录,大约需要2个小时才能完成. INSERT /*+ PARALLEL(STAGING_EX,16) APPEND NOLOGGING */ INTO STAGING_EX (ID,TRAN_DT,RECON_DT_START,RECON_DT_END,RECON_CONFIG_ID,RECON_PM_ID) SELECT /*+PARA
我们想加快下面的并行插入语句的运行.我们期望插入大约80M的记录,大约需要2个小时才能完成.
INSERT /*+ PARALLEL(STAGING_EX,16) APPEND NOLOGGING */ INTO STAGING_EX (ID,TRAN_DT,RECON_DT_START,RECON_DT_END,RECON_CONFIG_ID,RECON_PM_ID) 
SELECT /*+PARALLEL(PM,16) */ SEQ_RESULT_ID.nextval,sysdate,'8a038312403e859201405245eed00c42',T1.ID FROM PM T1 WHERE STATUS = 1 and not 
exists(select 1 from RESULT where T1.ID = RECON_PM_ID and CREATE_DT >= sysdate - 60) and 
UPLOAD_DT >= sysdate - 1 and (FUND_SRC_TYPE = :1)

我们认为缓存not exists列的结果会加快插入速度.我们如何执行缓存?有什么想法加快插入速度?

请参阅以下有关企业管理器的计划统计信息.我们还注意到这些语句没有并行运行.这是正常的吗?

编辑:顺便说一下,序列已经缓存到1M

解决方法

尝试使用更多绑定变量,尤其是在可能发生嵌套循环的情况下.我注意到你可以在像这样的情况下使用它
CREATE_DT >= :YOUR_DATE instead of CREATE_DT >= sysdate - 60

我认为这可以解释为什么在执行计划的最低部分有1.8亿次执行,即使更新查询的其他部分仍然是7900万中的800万.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读