笔者向一个表中插入数据关联三个表,在关联语句中存在子查询,表级容量都在千万级,运行时间难以忍受,具体语句如下:
INSERT INTO odse.te_prd_aux_prod_ins
(
SERV_PRODUCT_ROW_ID
,SERV_PRODUCT_ID
,SERV_ROW_ID
,SERV_ID
,PRODUCT_ROW_ID
,product_id
,product_standard_code
,BIZ_AREA_ID
,REGION_ID
,CUR_AGREE_ROW_ID
,APPLY_DATE
,EFF_DATE
,EXP_DATE
,COMPLETE_DATE
,STOP_DATE
,REMOVE_DATE
,STATUS_CD
,SUB_ACT_CD
,SUB_ACT_CD_NM
,CUR_MONTH_EFF_FLAG
,CREATED_DATE
,CREATED_BY
,LAST_UPD
,LAST_UPD_BY
,INDB_FILE_NAME
,OP_DATE
)
SELECT
ta.ASSET_ROW_ID
,ta.X_PROD_INST_NUM
,ta.ROOT_ASSET_ID
,ta.X_PROD_INST_NUM
,ta.PROD_ID
,tp.prod_id
,tp.standard_code
,ta.BIZ_AREA_ID
,ta.X_REGION_ID
,ta.CUR_AGREE_ID
,ta.INSTALL_DT
,tv.ATTRIB_12
,tv.ATTRIB_13
,tv.ATTRIB_27
,tv.ATTRIB_28
,tv.ATTRIB_29
,ta.STATUS_CD
,ta.SUB_ACT_CD
,ta.SUB_ACT_CD_NM
,ta.X_TAKEEFFECT_FLAG
,ta.CREATED_DATE
,ta.CREATED_BY
,ta.LAST_UPD
,ta.LAST_UPD_BY
,ta.INDB_FILE_NAME
,ta.OP_DATE
FROM
(select * from odse.te_prd_proo_in_ap where rec_status=1) ta
LEFT JOIN
(select * from odsd.TES_CRM_PRODUCT where rec_status=1) tp
ON
ta.PROD_ID=tp.row_id
LEFT JOIN
(select * from odse.te_prd_prod_ext_x where rec_status=1) tv
ON
ta.asset_row_id=tv.asset_row_id
请高手们赐教如何提高运行速率?注:不使用存储过程和不建索引。
odse.te_prd_proo_in_ap 记录:57267461
odse.te_prd_prod_ext_x 记录:87674914
odsd.tes_crm_product 记录:4228
博主面临一个性能问题,需要在Oracle数据库中插入数据,涉及三张千万级的大表关联,其中包括子查询。尽管不考虑存储过程和新建索引,寻求提升INSERT INTO...SELECT语句运行速度的方法。已知表odse.te_prd_proo_in_ap有57267461条记录,odse.te_prd_prod_ext_x有87674914条记录,而odsd.tes_crm_product有4228条记录。

4939

被折叠的 条评论
为什么被折叠?



