从大型MySQL innoDB表中删除记录
我知道这个问题已经被问过一百次了,但不幸的是,这些答案都没有帮助,因为大多数都已经很多年了,它应该证明另一个答案是正确的 我有两个表,记录为+140kk行/+24GB,额外记录为+89kk行/+70GB 每个额外的行都有一个与记录的外键关系,索引在两个表之间正确设置。从记录中删除将删除级联到相关的额外行 我需要在生产过程中清除旧记录。 运行从记录中删除,其中创建位置从大型MySQL innoDB表中删除记录,mysql,mariadb,Mysql,Mariadb,我知道这个问题已经被问过一百次了,但不幸的是,这些答案都没有帮助,因为大多数都已经很多年了,它应该证明另一个答案是正确的 我有两个表,记录为+140kk行/+24GB,额外记录为+89kk行/+70GB 每个额外的行都有一个与记录的外键关系,索引在两个表之间正确设置。从记录中删除将删除级联到相关的额外行 我需要在生产过程中清除旧记录。 运行从记录中删除,其中创建位置
如果这是一个重复性的任务,请考虑使用分区,这样Delp分区就可以用来“立即”执行契约。
在第一个查询中,ID是否需要那个顺序?不用它就尝试它。这是避免复制问题所必需的。只要是ASC default order,就没有什么区别。在WHERE子句中进行范围检查后,AFAIK order BY id不能使用索引。您是否尝试过在没有ORDER BY和LIMIT的情况下执行此操作?select将在毫秒内返回,因此LIMIT和ORDER BY不是问题。由于这是一个生产数据库,我们无法在一天内锁定该表,因此需要对其进行分块操作。为了使查询具有确定性,需要使用ORDER BY,否则会破坏复制。ID的顺序是否与创建的顺序相同?这是什么类型的语法?我无法让它在过程中工作;它需要转换为您正在使用的任何语言。我倾向于避免使用存储过程,因为我发现它们比PHP或Perl更笨拙。你是用什么语言写的?这个数据库的应用程序是用java编写的。但我更喜欢nodejs/php甚至bash/perl脚本。有什么建议吗?在Perl中,我总是使用DBIx::DWIW。但是使用你觉得舒服的东西。