SQL 查询插入时间过长
Posted
技术标签:
【中文标题】SQL 查询插入时间过长【英文标题】:SQL query is taking too long to insert 【发布时间】:2019-11-14 17:47:16 【问题描述】:我正在尝试将数据插入到 P_TABLE 中,这需要花费大量时间 ~5-6 小时来插入。它是与大表连接的简单插入。有什么方法可以减少时间吗?它是一个截断和加载过程
我已经提供了必要的信息,包括解释。
P_TABLE -- PARTITION ON TEAM
WH_TAB --- Total count = 2222000000
UNIQUE INDEX ON EX_ID,PROD_CD,CAM_CD,SEG_CD,LIST_CD,MAIL_DT
PARTITION BY RANGE (MAIL_DT)
REF_TAB--Total count= 240000000
ACT_TAB --Total count = 31239890
ALTER SESSION ENABLE PARALLEL DML;
INSERT /*+ append */ INTO P_TABLE
(
V_CODE,
CST_ID,
EX_ID,
PROD_CD,
CAM_CD,
SEG_CD,
LIST_CD,
MAIL_DT
)
SELECT
'ABC',
COALESCE(REF.CST_ID, WH.CST_ID),
WH.EX_ID,
PROD_CD,
CAM_CD,
SEG_CD,
LIST_CD,
F.TEAM,
FROM WH_TAB WH
LEFT OUTER JOIN
(
SELECT EX_ID, CST_ID, ACCT_ID, row_number() over(partition by EX_ID order by CST_ID asc) RN
FROM REF_TAB
) REF
LEFT OUTER JOIN ACT_TAB F
on F.CST_ID=REF.CST_ID
ON REF.RN=1 AND REF.EX_ID=WH.EX_ID
WHERE TRUNC(MAIL_DT) >= add_months(TRUNC(sysdate),-13)
AND WH.CAM_CD NOT LIKE 'ORD%';
COMMIT;
【问题讨论】:
【参考方案1】:我建议您在没有插入的情况下运行语句的选择部分,以确定慢速部分是查询还是插入。
很可能是选择问题,所以表结构,包括索引和解释输出真的需要多说。
【讨论】:
我在查询顶部提到的仅在 WH_TAB 中创建的索引以及其他表详细信息以及每个表中的总行数。以上是关于SQL 查询插入时间过长的主要内容,如果未能解决你的问题,请参考以下文章