我使用查询删除表中大约1/3的记录:
DELETE FROM `abc` LIMIT 10680000;
Run Code Online (Sandbox Code Playgroud)
查询将显示在状态为"正在更新"的进程列表中.总共有30万条记录.该表有5列和两个索引,当转储到SQL时,该文件大约为9GB.
这是MySQL中唯一的数据库和表.
它运行在具有2GB内存,3 GHz四核处理器和快速SAS磁盘的计算机上.MySQL不执行除此DELETE操作之外的任何读取或写入操作.机器上没有运行其他"重"进程.
此查询已运行超过2小时 - 我可以期待多长时间?
谢谢您的帮助!我对MySQL很陌生,因此在运行此查询时,任何关于"引擎盖下"发生的事情都是非常感激的.
如果我能提供任何其他相关信息,请告诉我.
更新:我刚跑了一个COUNT(*),在2个小时内,它只删除了200k记录.我想我将采用Joe Enos的建议,看看将数据插入新表并删除上一个表的效果如何.
更新2:对不起,我实际上误读了这个号码.在2个小时内,它不会被删除任何东西.我糊涂了.有什么建议?
更新3:我最终使用mysqldump,--where "true LIMIT 10680000,31622302"然后将数据导入新表.然后我删除了旧表并重命名了新表.这花了半个多小时.
当您运行此查询时,数据库的 InnoDB 日志文件用于记录已删除行的所有详细信息 - 如果此日志文件从一开始就不够大,它将自动扩展必要的(如果配置为这样做)-我不熟悉具体细节,但我预计这种自动扩展不会快得令人眼花缭乱。2 小时确实看起来很长 - 但如果日志文件随着查询运行而增长,我并不感到惊讶。
正在删除记录的表是否位于外键末尾(即另一个表是否通过 FK 约束引用它)?
| 归档时间: |
|
| 查看次数: |
7320 次 |
| 最近记录: |