EAS二次开发语句优化之BOTP语句

来源:互联网 发布:淘宝周大生是真的吗 编辑:程序博客网 时间:2024/06/07 19:21

1、进行ADDM分析时,发现一个IO较高的语句:

DELETE FROM T_BOT_RELATION

 WHERE (FSRCOBJECTID ='G0Ae4JdpSQ6tO2IwJ4MtYZNwHqg='OR

       FDESTOBJECTID = 'G0Ae4JdpSQ6tO2IwJ4MtYZNwHqg=')

分析语句,定位到业务是删除BOTP记录的。这样的每次执行的时候,都会全表扫描T_BOT_RELATION,而这张表的数据量已经到了10G的级别了。效率低下,执行语句需要约20S.

2、经过与金蝶沟通,确定为二次开发的代码,所以对二次开发的代码进行了一遍审核,发现了该段sql来源于二次开发中了cybill类。

3、将其中的代码修改为:

DELETE FROM T_BOT_RELATION

 WHERE FIDIN (SELECT FIDFROM T_BOT_RELATIONWHERE

FSRCOBJECTID = ?

UNION ALL

SELECT FIDFROM T_BOT_RELATIONWHERE

       FDESTOBJECTID = ?)

这样就能够通过索引来进行快速的删除了。每次删除一个BOTP记录从目前的20秒提升至0.01秒。

4、经过对二次开发涉及到BOTP的单据进行测试,删除单据的效率从原来的4分钟/10单提升至20S/10单,极大的提升了效率。


0 0
原创粉丝点击