某机构去年以
来,数据量暴增,原先写的包已经严重影响了每天的数据汇总,数据量
虽然只
增加了一倍,但是每天的数据汇总时间却是原来5到6倍而且数据还有继续上涨的可能性
,其中影响性能的一个关键语句是
一个delete语句,这个delete的语句的是通过ROWID进行
数据删除的,原先的程序通过bulk collect limit每10W条数据分批提交(forall 循环),
如果单从delete来说,这句已经到了顶峰,但是这相当于从一个8000w数据(每个分区)的表每次汇总都要删除几百万、这个随着数据量的增加已经严重影响了性能。
我们刚开始试了很多种方法,但是性能还不及原来,后来我们经过对表里的数据进行分析,我们发现每条账户数据前两位以字母开始,后面以数字结束,这个时候我们想,是否可以最后一位数字将所有数据进行切片建立位图索引 ,减小关联的笛卡尔积,同时将原有的delete语句换成insert,就是说我们将原来没有更新的数据整体插入到一张临时表,然后对原来的分区turncate掉,然后再将没有更新的数据插回去,同时也因为已经对数据进行了切片,关联结果集变小,SQL性能得到了极大的提升。通过,对这个SQL的优化,我们发现,优化数据,首先要(1)对数据有所了解(2) 千万 级数据的更新慎用delete(3)对大表数据操作,需要根据数据特点进行切片处理。
我们刚开始试了很多种方法,但是性能还不及原来,后来我们经过对表里的数据进行分析,我们发现每条账户数据前两位以字母开始,后面以数字结束,这个时候我们想,是否可以最后一位数字将所有数据进行切片建立位图索引 ,减小关联的笛卡尔积,同时将原有的delete语句换成insert,就是说我们将原来没有更新的数据整体插入到一张临时表,然后对原来的分区turncate掉,然后再将没有更新的数据插回去,同时也因为已经对数据进行了切片,关联结果集变小,SQL性能得到了极大的提升。通过,对这个SQL的优化,我们发现,优化数据,首先要(1)对数据有所了解(2) 千万 级数据的更新慎用delete(3)对大表数据操作,需要根据数据特点进行切片处理。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7199501/viewspace-1676906/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/7199501/viewspace-1676906/