朋友现在遇到一问题,希望高手能够帮忙,练练手!!
现有一张表(A表)没有日期字段-该表有6000万左右的数据,
另外有一张表(B表)与该表有索引关联也有6000万左右,
现需要对A表进行清理1个月以前的数据,但是发现从B表里取出一个月前的数据(200万左右),然后再到A表关联索引,做备份相关数据再删除,发现效率不高,为了提高效率,请问如何删除A表里面一个月以前的数据
如A表 --6000万以上
table A
(id char(20),
name char(40),
age integer
);
B表 --6000万以上
table B
( date date,
id char(20),
amount double(16,2),
rmrk char(50)
);
假定现在只有A表, 如何定期对A表进行删除清理,能够清理最早的数据库数据。
------解决方案--------------------
如果只有A表,那么可以使用作业,该作业删除A本月之前的数据。
作业可参考:http://hi.baidu.com/isongyuan/blog/item/cba4e730d2d05eaf5fdf0e5e.html
发现从B表里取出一个月前的数据(200万左右),然后再到A表关联索引,做备份相关数据再删除
A表与B表是一对多的关系还是多对一的关系呢??
------解决方案--------------------
如果可以,就重建。根据你要删除的条件,建立分区表。
定期把分区干掉就可以了
------解决方案--------------------
没有日期就难办了,你这个表做删除很更新?如果不做的话,可以按照插入数据的顺序(rowid)来判断新旧数据,根据ROWID在不同数据块的存储,来删除ROWID小的数据,不过此前提是没有更新和删除,,因为删除和更新的话,可能造成新数据插入到被删除的空闲块中,ROWID就被重新使用了
------解决方案--------------------
楼主,参考这个方法试试:http://www.cnblogs.com/rootq/archive/2009/01/31/1381718.html
采用顺序读A表,降低物理读!
------解决方案--------------------
楼主要删除备份A表一个月的数据,一次性操作很慢的话可以考虑批量绑定FORALL,同时分批次进行,每次处理一个星期的资料,这样不会占用太大的内存.