【分享】KSQL脚本写法不佳导致EAS系统升级超慢
金蝶云社区-yangyang0283
yangyang0283
0人赞赏了该文章 692次浏览 未经作者许可,禁止转载编辑于2014年09月02日 10:24:23
问题描述:
KSQL脚本写法不佳导致EAS系统升级超慢。对应的一条sql语句如下所示:
UPDATE t_cas_paymentbill
SET (fsourcebillid)
= (SELECT t2.fsourcebillid FROM t_cas_paymentbillentry T2 WHERE t2.fpaymentbillid = t_cas_paymentbill.fid AND ROWNUM <= 1)
WHERE EXISTS (SELECT t2.fsourcebillid FROM t_cas_paymentbillentry T2 WHERE t2.fpaymentbillid = t_cas_paymentbill.fid AND ROWNUM <= 1);
(当前问题出现的环境:AIX 系统+ORACLE 10G)
解决方案原因分析:
1.KSQL语句会自动带上一些附加条件,这些条件会影响整体性能。
2.KSQL语句的写法不是最佳:update语句跟普通select语句是不一样的,它的原理是一条一条更新记录,则where条件也要每更新一条记录,过滤一次,如果里面有几十万条记录,则要过滤几十万次。大大的耗用了cpu的时间。
解决方法:
将KSQL的写法改为标准SQL的写法来提升升级脚本执行的速度。
修改的地方有:
1.把where条件去掉,改为用NVL( , fsourcebillid)。
2.ROWNNUM<=1 改为了 ROWNUM=1 减少了CPU的时间。
3.运用上t2.fpaymentbillid这个索引。
修改后的sql语句如下所示:
UPDATE t_cas_paymentbill
SET (fsourcebillid)
= NVL((SELECT t2.fsourcebillid FROM t_cas_paymentbillentry T2 WHERE t2.fpaymentbillid = t_cas_paymentbill.fid AND ROWNUM

您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!

请选择打赏金币数 *

10金币20金币30金币40金币50金币60金币
可用金币: 0