首页 > 其他 > 详细

大表,某列无索引,先需要查询该列,删除符合条件的记录,大约占40%数据量,请问有何更好的方案吗?

时间:2020-06-17 16:15:01      阅读:59      评论:0      收藏:0      [点我收藏+]
大表,某列无索引,先需要查询该列,删除符合条件的记录,大约占40%数据量,请问有何更好的方案吗?


一、存在其他索引(主键、唯一索引、普通索引)的情况
    1、可利用现有索引分段扫描全表,例如每次只读取1000条记录,然后再根据条件进行判断并删除数据(最好是进行归档,而不是真正删除)。
    2、由于要删除掉的数据量比较大,会造成InnoDB表较多碎片,可以考虑用反向操作,也就是创建新表,把要保留的数据复制过去,最后再将两个表对调。
    3、利用 pt-archiver 工具进行归档。


二、无任何索引的情况
    1、真发生这种情况的话,负责的DBA或者相关同学麻烦引咎辞职吧。这句话是开玩笑的,嘿,不过说真的也太挫了。
    2、观察条件列,如果区分度较高(不同值较多),就创建一个新索引,再根据索引删除数据。
    3、对该表创建一个自增主键列,然后参考上述方案,根据主键索引分段扫描、判断、删除(归档)。

 

大表,某列无索引,先需要查询该列,删除符合条件的记录,大约占40%数据量,请问有何更好的方案吗?

原文:https://www.cnblogs.com/zhouwanchun/p/13152752.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!