Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
插入百万条记录时Oracle查询优化_Oracle_Oracle Sqldeveloper_Query Optimization_Oracle12c - Fatal编程技术网

插入百万条记录时Oracle查询优化

插入百万条记录时Oracle查询优化,oracle,oracle-sqldeveloper,query-optimization,oracle12c,Oracle,Oracle Sqldeveloper,Query Optimization,Oracle12c,我们正在尝试在生产环境中执行一个查询,这出乎意料地花费了5个多小时,但仍未完成。此查询预计将插入180万条记录。我完全控制FSG_WRK.FSG_PRCB_CSP_EXT_HR表,但FAC.CMC_PRSQ_SITE_QA是我们的系统表,我无法在其上添加任何索引 请建议 查询: 解释计划: 如果您“只是”将数据从A迁移到B,您可能会看到,如果A合并到A,而A不匹配,那么在语句末尾插入不是更好的选择 180万条记录不会对您的oracle实例造成太大的挑战。顺便说一句,看起来您希望通过EXT.CAN

我们正在尝试在生产环境中执行一个查询,这出乎意料地花费了5个多小时,但仍未完成。此查询预计将插入180万条记录。我完全控制FSG_WRK.FSG_PRCB_CSP_EXT_HR表,但FAC.CMC_PRSQ_SITE_QA是我们的系统表,我无法在其上添加任何索引

请建议

查询:

解释计划:


如果您“只是”将数据从A迁移到B,您可能会看到,如果A合并到A,而A不匹配,那么在语句末尾插入不是更好的选择


180万条记录不会对您的oracle实例造成太大的挑战。

顺便说一句,看起来您希望通过EXT.CANC_DT在每个组中获取最新的行。如果是这种情况,则更容易使用:

插入FAC.CMC\u PRSQ\u站点\u QA 带CTE MPIN、税务识别号、POS ADR识别号、BSAR识别号、CANC识别号、EFF识别号、EXTND识别号 像 选择 分机MPIN、分机TAX\u ID\u NBR、分机POS\u ADR\u ID、分机BSAR\u ID ,MAXEXT.CANC_DT CANC_DT ,maxet.EFF_DT keepdense_按EXT.CANC_DT desc EFF_DT排名第一 ,MAXEXT.EXTND\u HRS按EXT.CANC\u DT desc EXTND\u HRS排名第一 来自FSG_WRK.FSG_PRCB_CSP_EXT_HR EXT 在哪里 按EXT.MPIN、EXT.TAX\u ID\u NBR、EXT.POS\u ADR\u ID、EXT.BSAR\u ID分组 选择不同的 PRSQ.PRPR_ID, PRSQ.PRAD_ID, PRSQ.PRAD_类型, PRSQ.PRAD_EFF_DT, EXT.EFF_DT PRSQ_LAST_VER_DT, 当TRIMEXT.EXTND_HRS='W'然后是'EHRW'时的情况 当TRIMEXT.EXTND_HRS='B'然后是'EHRB' 当TRIMEXT.EXTND_HRS='E'然后是'EHRE' 当TRIMEXT.EXTND\u HRS='N'然后是'EHRN' 作为PRSQ_MCTR_项目结束, PRSQ.PRSQ_INIT_VER_DT, 分机CANC_DT PRSQ_NEXT_VER_DT, PRSQ.PRSQ_RCVD_VER_DT, PRSQ.PRSQ_MCTR_VSRC, PRSQ.PRSQ_PRIM_VER_IND, PRSQ.PRSQ_MCTR_VRSL, “”PRSQ_姓氏, PRSQ.PRSQ_MCTR_VMTH, ""记者问:, PRSQ.PRSQ_锁_令牌, PRSQ.ATXR\u源\u ID 从FAC.CMC_PRSQ_站点_QA PRSQ 加入CTE EXT 在EXT.MPIN=substrpsq.prprpr_ID上,1,9 TRIMEXT.BSAR_ID=TRIM PRSQ.PRSQ_LAST_VER_NAME 和TRIM EXT.POS_ADR_ID=TRIM PRSQ.PRSQ_注释 TRIMEXT.CANC_DT=TRIMPRSQ.PRSQ_NEXT_VER_DT 以及“SAID”中的PRSQ.PRSQ_MCTR_项目 而且不存在 从FAC.CMC\u NWPR\u关系NWPR中选择1 其中NWPR.PRPR_ID=PRSQ.PRPR_ID 和NWPR.nww_ID='MINETWORK' ;
能否启用sql跟踪并将其发布到此处?在此插入过程中,我们需要精确的等待事件。线路负载表中的上次运行时间太长。可能有我不想猜测的表或行锁,所以最好得到真正的等待事件。如果您的EE具有许可的诊断和调优包,那么提供ashrpt输出或原始ash转储将更容易
INSERT INTO FAC.CMC_PRSQ_SITE_QA 
WITH CTE (MPIN, TAX_ID_NBR, POS_ADR_ID, BSAR_ID, CANC_DT, EFF_DT, EXTND_HRS)
AS(
    SELECT EXT.MPIN , 
    EXT.TAX_ID_NBR  , 
    EXT.POS_ADR_ID  , 
    EXT.BSAR_ID     , 
    temp.CANC_DT    , 
    EXT.EFF_DT      ,   
    EXT.EXTND_HRS 
    FROM FSG_WRK.FSG_PRCB_CSP_EXT_HR ext
    INNER JOIN ( SELECT  EXT.MPIN, 
                    EXT.TAX_ID_NBR, 
                    EXT.POS_ADR_ID, 
                    EXT.BSAR_ID, 
                    MAX(EXT.CANC_DT) CANC_DT
                FROM FSG_WRK.FSG_PRCB_CSP_EXT_HR EXT
                WHERE FLAG ='Y'
                GROUP BY EXT.MPIN, EXT.TAX_ID_NBR, EXT.POS_ADR_ID, EXT.BSAR_ID) temp
    ON( ext.MPIN = temp.MPIN
    AND ext.TAX_ID_NBR = temp.TAX_ID_NBR
    AND ext.POS_ADR_ID = temp.POS_ADR_ID
    AND ext.BSAR_ID    = temp.BSAR_ID
    AND ext.CANC_DT    = temp.CANC_DT)
)
SELECT DISTINCT 
        PRSQ.PRPR_ID,
        PRSQ.PRAD_ID ,
        PRSQ.PRAD_TYPE,
        PRSQ.PRAD_EFF_DT,
        EXT.EFF_DT  PRSQ_LAST_VER_DT,
        CASE    WHEN TRIM(EXT.EXTND_HRS)='W' THEN 'EHRW'
                WHEN TRIM(EXT.EXTND_HRS)='B' THEN 'EHRB'
                WHEN TRIM(EXT.EXTND_HRS)='E' THEN 'EHRE'
                WHEN TRIM(EXT.EXTND_HRS)='N' THEN 'EHRN'
        END AS PRSQ_MCTR_ITEM,
        PRSQ.PRSQ_INIT_VER_DT,
        EXT.CANC_DT PRSQ_NEXT_VER_DT,
        PRSQ.PRSQ_RCVD_VER_DT,
        PRSQ.PRSQ_MCTR_VSRC,
        PRSQ.PRSQ_PRIM_VER_IND,
        PRSQ.PRSQ_MCTR_VRSL,
        ' ' PRSQ_LAST_VER_NAME,
        PRSQ.PRSQ_MCTR_VMTH,
        ' ' PRSQ_COMMENT,
        PRSQ.PRSQ_LOCK_TOKEN,
        PRSQ.ATXR_SOURCE_ID         
        FROM FAC.CMC_PRSQ_SITE_QA PRSQ 
        JOIN CTE EXT
        ON EXT.MPIN = SUBSTR(PRSQ.PRPR_ID,1,9)
        AND TRIM(EXT.BSAR_ID) = TRIM (PRSQ.PRSQ_LAST_VER_NAME)
        AND TRIM (EXT.POS_ADR_ID) = TRIM (PRSQ.PRSQ_COMMENT)
        AND TRIM(EXT.CANC_DT) = TRIM(PRSQ.PRSQ_NEXT_VER_DT)
        AND PRSQ.PRSQ_MCTR_ITEM IN ('SAID')
        AND NOT EXISTS(
                        SELECT 1 FROM FAC.CMC_NWPR_RELATION NWPR
                        WHERE NWPR.PRPR_ID = PRSQ.PRPR_ID    
                        AND NWPR.NWNW_ID = 'MINETWORK'
            );