Oracle优化:千万级大表逻辑判断的累赘
admin
2023-05-04 13:01:36
0

insert into pntmall_point_detail(PNTMALL_PNT_ID,PNTMALL_PNT_DT,PNTMALL_VALIDITY,PNTMALL_LASTUPDATEDT,

                           PNTMALL_RPTPNT_ID,PNTMALL_HAIERUID,

                   PNTMALL_OPTYPE_ID,PNTMALL_OPTYPE_DESC,

                         PNTMALL_NUM,PNTMALL_EXPDT,HPT_REDEMPT_POINT,

                         HPT_LEFT_POINT,HPT_FULLREDEMPT_STATUS)

  SELECT PNTMALL_PNT_ID,PNTMALL_PNT_DT,PNTMALL_VALIDITY,PNTMALL_LASTUPDATEDT,

                           PNTMALL_RPTPNT_ID,PNTMALL_HAIERUID,

                   PNTMALL_OPTYPE_ID,PNTMALL_OPTYPE_DESC,

                         PNTMALL_NUM,PNTMALL_EXPDT,0 as HPT_REDEMPT_POINT,PNTMALL_NUM,0

    FROM pntmall_point_detail_tmp a

          WHERE NOT EXISTS (SELECT b.PNTMALL_PNT_ID
            FROM pntmall_point_detail b
           WHERE a.PNTMALL_PNT_ID = b.PNTMALL_PNT_ID);



PNTMALL_POINT_DETAIL包含3800万条数据,cost 6 hours。


优化后

 

delete from pntmall_point_detail_tmp a where exists (select 1 from pntmall_point_detail b where a.PNTMALL_PNT_ID = b.PNTMALL_PNT_ID);


insert into pntmall_point_detail(PNTMALL_PNT_ID,PNTMALL_PNT_DT,PNTMALL_VALIDITY,PNTMALL_LASTUPDATEDT,

                           PNTMALL_RPTPNT_ID,PNTMALL_HAIERUID,

                   PNTMALL_OPTYPE_ID,PNTMALL_OPTYPE_DESC,

                         PNTMALL_NUM,PNTMALL_EXPDT,HPT_REDEMPT_POINT,

                         HPT_LEFT_POINT,HPT_FULLREDEMPT_STATUS)

  SELECT PNTMALL_PNT_ID,PNTMALL_PNT_DT,PNTMALL_VALIDITY,PNTMALL_LASTUPDATEDT,

                           PNTMALL_RPTPNT_ID,PNTMALL_HAIERUID,

                   PNTMALL_OPTYPE_ID,PNTMALL_OPTYPE_DESC,

                         PNTMALL_NUM,PNTMALL_EXPDT,0 as HPT_REDEMPT_POINT,PNTMALL_NUM,0

    FROM pntmall_point_detail_tmp a;



cost 5 minutes。


其实还可以进一步优化

drop indexBER.INDEX_POD_PNTMALL_HAIERUID;

drop indexBER.PNTMALL_POINT_ID_HAIERUID;

delete from pntmall_point_detail_tmp a where exists (select 1from pntmall_point_detailb where a.PNTMALL_PNT_ID =b.PNTMALL_PNT_ID);

insert/*+append*/into pntmall_point_detail(PNTMALL_PNT_ID,PNTMALL_PNT_DT,PNTMALL_VALIDITY,PNTMALL_LASTUPDATEDT,

                           PNTMALL_RPTPNT_ID,PNTMALL_HAIERUID,

                   PNTMALL_OPTYPE_ID,PNTMALL_OPTYPE_DESC,

                         PNTMALL_NUM,PNTMALL_EXPDT,HPT_REDEMPT_POINT,

                         HPT_LEFT_POINT,HPT_FULLREDEMPT_STATUS)

  SELECT PNTMALL_PNT_ID,PNTMALL_PNT_DT,PNTMALL_VALIDITY,PNTMALL_LASTUPDATEDT,

                           PNTMALL_RPTPNT_ID,PNTMALL_HAIERUID,

                   PNTMALL_OPTYPE_ID,PNTMALL_OPTYPE_DESC,

                         PNTMALL_NUM,PNTMALL_EXPDT,0 as HPT_REDEMPT_POINT,PNTMALL_NUM,0

    FROM pntmall_point_detail_tmp a; 

commit;

WHERE NOT EXISTS (SELECT b.PNTMALL_PNT_ID

            FROMpntmall_point_detail b

           WHEREa.PNTMALL_PNT_ID = b.PNTMALL_PNT_ID);


create index BER.INDEX_POD_PNTMALL_HAIERUIDon BER.PNTMALL_POINT_DETAIL (PNTMALL_HAIERUID) online nologing;

create unique indexBER.PNTMALL_POINT_ID_HAIERUID on BER.PNTMALL_POINT_DETAIL (PNTMALL_PNT_ID) online nologing;



总体优化思路,不要在insert中加入过多的判断语句,删索引,append,重建索引,如果是归档模式,alter table nologing;append 只适用于insert select 这种方式,而且insert后要加commit,否则无法进行其他DML操作。


实测 append 1600万条数据,cost 8s

相关内容

热门资讯

什么信号?多地要求干部带头缴纳... 多地要求干部带头缴纳物业费。最近一段时间,物业费成了社会关注的焦点。原因竟然是多地密集出台文件,号召...
“这不是威胁而是绝佳机遇”,默... 【文/观察者网 张菁娟】“当下挑战之所以如此巨大,是因为我们长期以来为自己制造了太多问题,而这些问题...
老杜盟友半路杀出,“闪电夺权”... 最近两天,马尼拉的政治温度直接爆表。5月11日上午,菲律宾众议院以255票赞成、26票反对、9票弃权...
“六张网”项目密集启动 进一步... 新华社北京5月13日电 题:“六张网”项目密集启动 进一步释放内需潜力经济参考报记者汪子旭近期,一批...
豪华邮轮病毒,横跨三大洲始末 5月11日,泛海探险公司确认,隶属于该公司的“洪迪厄斯”号邮轮抵达西班牙特内里费岛后,全部87名乘客...
苏泊尔球釜电饭煲不通电是什么原... 1、有可能是温度保险管出现了问题,每个电饭煲都有温度保险管,而不是家常用的保险丝,如果保险管出现了问...
九阳铁釜电饭煲不通电原因 1、可能是面板烧了。2、控制电路没有工作,先检查控制电源是否正常。电饭煲的面板显示器线路接触不良,找...
空调线控器出现“黑... 珠海总部对于退回的多联机线控器黑屏“故障”,部分是由于不清楚线控器的灯光功能,误触发线控器关闭了灯光...
长虹柜机温度传感器是多少K 每一个空调传感器的传感温度都会对应着不同的空调工作型号和参数,常见的有5K,10K和15K,当然在不...
测电笔测不出的漏电 1、如果漏电的电压比较低的话有时候测电笔就测试不出来的。2、有时候测电笔在出厂的时候没有检测好,就有...