SQL优化心得

       最近有个项目要做两个数据库中两个表(源表为A、B表,目标表为A+和B+)的同步、比较,主要是将源表与目标表进行同步,每次同步时要将差异记录(新增、删除、修改的记录)进行逐条保存,并保存历史信息、写日志表(且A表与A+同步要操作B+表记录)。

       开始估计数据量不大,测试数据大概是A表3万条、B表3万条进行同步操作,每次差异记录大概1.5万条。设计了一存储过程实现同步,主要使用了4个游标、很多的exists或not exists语句、很多的更新操作。同步一次大概10到20分钟。

       后来拿到真实数据,数据量比前期估计相差很大,A表实际有400万条左右、B表100多万条,每次差异大概6-7万条,原有存储过程根本无法执行。

      后期进行优化后,同步时间大概6到15分钟,主要优化的点有:

            1、取消游标,使用别的方法进行处理;

            2、将所有的exists或not exists转成连接(left join、inner join、right join);

            3、将更新数据量大的update语句使用delete->insert实现,具体是将要同步更新的源记录插入一个结构相同的临时表,然后删除目标表的需同步更新的记录,最后将临时表中的数据插入目标表;

      (在Oracle中实现,未使用工具)

转载于:https://www.cnblogs.com/sangrei/archive/2009/03/18/1416089.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值