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 查询插入时间过长的主要内容,如果未能解决你的问题,请参考以下文章

SQL 查询执行时间过长。需要提高查询的性能

小表上的简单 SQL 查询执行时间过长

SQL 查询耗时过长

Microsoft SQL Server:错误的查询执行计划耗时过长

SQL 查询在 SSMS 中运行时间过长

sqlserver查询执行时间过长的sql