当前位置: 首页 > 面试题库 >

在MySQL中删除数百万行

卞昀
2023-03-14
问题内容

我最近发现并修复了我正在处理的站点中的错误,该错误导致表中有数百万行重复的数据行,即使没有行也将非常大(仍然有数百万行)。我可以轻松找到这些重复的行,并可以运行一个删除查询来杀死它们。问题是试图一次删除这么多行会长时间锁定表,如果可能的话,我想避免这种情况。我可以看到摆脱这些行而又不占用站点(通过锁定表)的唯一方法是:

  1. 编写一个脚本,该脚本将循环执行数千个较小的删除查询。从理论上讲,这将解决锁定表的问题,因为其他查询将能够使其进入队列并在删除之间运行。但是它仍然会在一定程度上增加数据库的负载,并且需要很长时间才能运行。
  2. 重命名表并重新创建现有表(该表现在为空)。然后在重命名的表上进行清理。重命名新表,重命名旧表,然后将新行合并到重命名表中。这种方法需要花费更多的步骤,但是应该以最小的中断来完成工作。这里唯一棘手的部分是,有问题的表格是报表表格,因此,一旦将其重命名并放了空表格,所有历史报表都将消失,直到我将其放回原处。另外,由于要存储的数据类型,合并过程可能会有些麻烦。总的来说,这是我现在可能的选择。

我只是想知道以前是否有人遇到过这个问题,如果是的话,您如何在不关闭站点的情况下进行处理,希望对用户的干扰最小(如果有的话)?如果我使用2号或其他类似的方法,我可以将这些内容安排在深夜运行,并在第二天清晨进行合并,只需要提前通知用户即可,所以这不是什么大问题。我只是想看看是否有人对更好或更轻松的清理方式有任何想法。


问题答案:
DELETE FROM `table`
WHERE (whatever criteria)
ORDER BY `id`
LIMIT 1000

洗涤,漂洗,重复直到零行受到影响。也许在脚本之间,在两次迭代之间hibernate一到两秒。



 类似资料:
  • 发生的事情 由于系统中的错误,上个月的所有数据都已损坏。所以我们不得不手动删除并重新输入这些记录。基本上,我想删除在某段时间内插入的所有行。但是,我发现很难在HBase中扫描和删除数百万行。 可能的解决方案 我找到了两种批量删除的方法: 第一种是设置一个TTL,这样所有过期的记录都会被系统自动删除。但是我想保留上个月之前插入的记录,所以这个解决方案对我不起作用。 第二种选择是使用Java API编

  • 问题内容: 我正在为一个即将到来的Web应用程序进行数据库设计,我想知道是否有人在他们当前的Web应用程序中大量使用mysql,这种设计对于一个可以说80,000个用户的Web应用程序是否有效。 1个DB 在DB中,每个用户的功能都有数百万个表,并且在每个表中可能有数百万行。 尽管此设计非常动态并且可以很好地扩展,但我想知道两件事。 这是当今Web应用程序中的常见设计吗? 如果查询数百万行,这在时

  • 微软Azure文档中没有提到这一点。正式的批量执行器文档只讨论插入和更新选项,而不是删除。有一个建议的java脚本服务器端程序来创建一个存储过程,听起来很不错,但这需要我们输入分区键值。如果我们的文档分布在数百万个逻辑分区上,那就没有意义了。 这是一个非常简单的业务需求。在迁移sql api cosmos集合中的大量数据时,如果我们插入了一些错误的数据,似乎没有选择删除其他数据然后恢复到以前的状态

  • 问题内容: 这是一次冒险。我从上一个问题中的循环重复查询开始,但是每个循环将遍历所有 1700万条记录 , 这意味着将花费数周的时间 (使用MSSQL 2005,运行服务器需要4:30分钟)。我从这个站点和这个帖子中闪现了信息。 并已经到达下面的查询。问题是,对于任何类型的性能,这是否是对1700万条记录运行的正确查询类型?如果不是,那是什么? SQL查询: 问题答案: 看到QueryPlan会有

  • 主要内容:删除单个表中的数据,删除表中的全部数据,根据条件删除表中的数据在 MySQL 中,可以使用 DELETE 语句来删除表的一行或者多行数据。 删除单个表中的数据 使用 DELETE 语句从单个表中删除数据,语法格式为: DELETE FROM <表名> [WHERE 子句] [ORDER BY 子句] [LIMIT 子句] 语法说明如下: :指定要删除数据的表名。 子句:可选项。表示删除时,表中各行将按照子句中指定的顺序进行删除。 子句:可选项。表示为删除操作

  • 问题内容: 我有以下查询: 分析表有6000万行,而交易表有3M行。 在此查询上运行时,我得到: 我已经不知道如何优化此查询了,因为它已经非常基础了。运行此查询大约需要70秒钟。 以下是存在的索引: 根据建议,在添加任何额外索引之前简化了两个表的架构,因为这并不能改善情况。 如果以上无法进一步优化。关于汇总表的任何实施建议都将非常有用。我们正在AWS上使用LAMP堆栈。上面的查询正在RDS(m1.