优化从非常大的MySQL表中删除

时间:2013-12-07 19:01:41

标签: mysql sql innodb

我有一个包含数千万行和多个索引的表(InnoDB)。我需要通过主键删除几百万行。这个操作比我想要的慢得多;我该怎么做才能加快速度呢?

正在进行的进程在此表上执行INSERT和SELECT。如果我能在不干扰这些过程的情况下做到这一点,那就太棒了,但这并非绝对必要。另外(我不确定它是否有所作为)此DB中没有外键。

2 个答案:

答案 0 :(得分:1)

您可以使用pt-archiver(查看Percona工具包)以非阻塞方式从表中删除记录。

pt-archiver --source h=host,D=db,t=child --purge --where 'id < 10000'

它不会比普通的DELETE FROM db.child WHERE id&lt;更快。 10000,但至少它不会阻止其他连接。

答案 1 :(得分:0)

pt-archiver --no-check-charset --source h = localhost,D = ABCD,t = XYZ --purge --optimize = s-其中“ id <10000”