Get the App
SLTechnology News&Howtos  ›  Database  › 

Oracle optimization: the encumbrance of tens of millions of large table logic judgments

Shulou Source: shulou.com Published: 2022-06-01 02:13:35 09月14日 Update

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 contains 38 million pieces of data, cost 6 hours.

After optimization

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 .

In fact, it can be further optimized.

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

Overall optimization idea, do not add too many judgment statements to insert, delete index, append, re-index, if it is an archive mode, alter table nologing;append is only suitable for insert select, and add commit after insert, otherwise other DML operations cannot be carried out.

16 million measured append data, cost 8s

Tags: Ten thousand articles data indexes ideas totals ways patterns statements too many middle plus one actual measurement encumbrance logic Apple Docker Huawei Linux macOS MariaDB Microsoft MySQL NVidia OPPO Reno Redmi OPPO Reno Docker NVidia MariaDB