DB2 存储过程执行效率问题

我纯洁全身都纯洁 2016-06-28 03:53:14
数据量是 11W

我把SQL 独立执行 很快 几秒就完事了,
可是 执行存储过程 两个小时都执行不完,
小弟第一次写存储过程,以前没用到多 求大神帮忙优化优化
  
DELETE CL_O_GRP WHERE STAT = '2';
DELETE CL_O_CUST WHERE STAT = '2';
DELETE CL_O_CUST_AUX WHERE STAT = '2';
DELETE CL_S_CUST WHERE STAT = '2' AND UPD_TIME < CURRENT TIMESTAMP - 3DAY;

--去重复
DECLARE GLOBAL TEMPORARY TABLE TMP_CL_O_GRP
(
--一堆字段
)NOT LOGGED WITH REPLACE;

DECLARE GLOBAL TEMPORARY TABLE TMP_CL_O_CUST
(
--一堆字段
)NOT LOGGED WITH REPLACE;

DECLARE GLOBAL TEMPORARY TABLE TMP_CL_O_CUST_AUX
(
--一堆字段
)NOT LOGGED WITH REPLACE;

--CL_O_GRP
INSERT INTO SESSION.TMP_CL_O_GRP(
--一堆字段
)SELECT
--一堆字段
FROM (SELECT
--一堆字段
,ROW_NUMBER()OVER(PARTITION BY CUST_NO ORDER BY DESC)AS ROW
FROM)WHERE ROW = 1;


--CL_O_CUST
INSERT INTO SESSION.TMP_CL_O_CUST(
--一堆字段
)SELECT
--一堆字段
FROM (SELECT
--一堆字段
,ROW_NUMBER()OVER(PARTITION BY CUST_NO ORDER BY DESC)AS ROW
FROM)WHERE ROW = 1;


--CL_O_CUST_AUX
INSERT INTO SESSION.TMP_CL_O_CUST_AUX(
--一堆字段
)SELECT
--一堆字段
FROM (SELECT
--一堆字段
,ROW_NUMBER()OVER(PARTITION BY CUST_NO ORDER BY DESC)AS ROW
FROM)WHERE ROW = 1;

DELETE CL_O_GRP;
DELETE CL_O_CUST;
DELETE CL_O_CUST_AUX;

INSERT INTO CL_O_GRP SELECT * from SESSION.TMP_CL_O_GRP;
INSERT INTO CL_S_CUST SELECT * from SESSION.TMP_CL_O_CUST;
INSERT INTO CL_O_CUST_AUX SELECT * from SESSION.TMP_CL_O_CUST_AUX;

--给STAT赋值
UPDATE CL_O_GRP SET STAT = '0' WHERE STAT IS NULL OR STAT = '';
UPDATE CL_O_CUST SET STAT = '0' WHERE STAT IS NULL OR STAT = '';
UPDATE CL_O_CUST_AUX SET STAT = '0' WHERE STAT IS NULL OR STAT = '';

--清理当日其他渠道更新到正式表的数据
DELET CL_O_GRP WHERE UPD_TIME = (SELECT UPD_TIME FROM CL_B_CU_CUST WHERE CL_B_CU_CUST.CUST_NO = CL_O_GRP.CUST_NO);
DELET CL_O_CUST WHERE UPD_TIME = (SELECT UPD_TIME FROM CL_B_CU_CUST WHERE CL_B_CU_CUST.CUST_NO = CL_O_CUST.CUST_NO);
DELET CL_O_CUST_AUX WHERE UPD_TIME = (SELECT UPD_TIME FROM CL_B_CU_CUST WHERE CL_B_CU_CUST.CUST_NO = CL_O_CUST_AUX.CUST_NO);

--把源表状态为0的数据导入到加工表,把加工表状态为0的数据导入正式表
SELECT COUNT(1) INTO v_data_count_grp FROM CL_O_GRP WHERE STAT = '0';
SELECT COUNT(1) INTO v_data_count_cust FROM CL_O_CUST WHERE STAT = '0';
SELECT COUNT(1) INTO v_data_count_aux FROM CL_O_CUST_AUX WHERE STAT = '0';

IF(v_data_count_grp >0) THEN
INSERT INTO CL_S_CUST(
--一堆字段
)SELECT
--一堆字段
FROM CL_O_GRP WHERE NOT EXISTS(SELECT CUST_NO FROM CL_S_CUST WHERE CL_S_CUST.CUST_NO = CL_O_GRP.CUST_NO) AND STAT = '0';

UPDATE CL_S_CUST SET(
--一堆字段
) = (SELECT
--一堆字段
FROM CL_O_GRP WHERE CUST_NO IN (SELECT CUST_NO FROM CL_S_CUST) AND CL_O_GRP.CUST_NO = CL_S_CUST.CUST_NO AND STAT = '0')
WHERE CUST_NO IN (SELECT CUST_NO FROM CL_O_GRP WHERE STAT = '0');

以下一样的批量SQL语句
END IF;
...全文
1148 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
等待时候 2016-07-01
  • 打赏
  • 举报
回复
IF(v_data_count_grp >0) THEN
INSERT INTO CL_S_CUST(
--一堆字段
)SELECT
--一堆字段
FROM CL_O_GRP WHERE NOT EXISTS(SELECT CUST_NO FROM CL_S_CUST WHERE CL_S_CUST.CUST_NO = CL_O_GRP.CUST_NO) AND STAT = '0';

UPDATE CL_S_CUST SET(
--一堆字段
) = (SELECT
--一堆字段
FROM CL_O_GRP WHERE CUST_NO IN (SELECT CUST_NO FROM CL_S_CUST) AND CL_O_GRP.CUST_NO = CL_S_CUST.CUST_NO AND STAT = '0')
WHERE CUST_NO IN (SELECT CUST_NO FROM CL_O_GRP WHERE STAT = '0');

以下一样的批量SQL语句
END IF;
  • 打赏
  • 举报
回复
昨天测试了一下,跑了两个多小时 都没跑完,然后拿出来单独执行 几秒就完事了 完全都不知道怎么回事

5,889

社区成员

发帖
与我相关
我的任务
社区描述
IBM DB2 是美国IBM公司开发的一套关系型数据库管理系统,它主要的运行环境为UNIX(包括IBM自家的AIX)、Linux、IBM i(旧称OS/400)、z/OS,以及Windows服务器版本
社区管理员
  • DB2
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧