13
在MySQL中删除数百万行
我最近发现并修复了我正在处理的站点中的错误,该错误导致表中数百万行数据的重复行,即使没有行,行也将非常大(仍然有数百万行)。我可以轻松找到这些重复的行,并可以运行一个删除查询来杀死它们。问题是试图一次删除这么多行会长时间锁定表,如果可能的话,我想避免这种情况。我看到的摆脱这些行而又不占用站点(通过锁定表)的唯一方法是: 编写一个脚本,该脚本将循环执行数千个较小的删除查询。从理论上讲,这将解决锁定表的问题,因为其他查询将能够使其进入队列并在删除之间运行。但是它仍然会在一定程度上增加数据库的负载,并且需要很长时间才能运行。 重命名表并重新创建现有表(该表现在为空)。然后在重命名的表上进行清理。重命名新表,重命名旧表,然后将新行合并到重命名表中。这种方式需要花费更多的步骤,但是应该以最小的中断来完成工作。这里唯一棘手的部分是,所讨论的表是报表表,因此一旦将其重命名并放了一个空表,所有历史报表都将消失,直到我将其放回原位。另外,由于要存储的数据类型,合并过程可能会有些麻烦。总的来说,这是我现在可能的选择。 我只是想知道以前是否有人遇到过这个问题,如果是的话,您如何在不关闭站点的情况下进行处理,希望对用户的干扰最小(如果有的话)?如果我使用2号或其他类似的方法,我可以将这些内容安排在深夜运行,并在第二天清晨进行合并,并且只需要提前通知用户即可,所以这不是什么大问题。我只是想看看是否有人对更好或更轻松的清理方式有任何想法。