MySQL:从一个表中删除,而不使用多个语句

时间:2014-11-05 04:16:55

标签: mysql

我试图通过执行以下命令来清理MySQL中的7.5GiB表:

DELETE FROM wp_commentmeta WHERE comment_id NOT IN  (SELECT comment_id FROM wp_comments);

这两个字段之间没有外键。由于(第二个?两个?)表的大小,尝试执行此操作会导致以下错误:

  

多语句交易需要超过' max_binlog_cache_size'   存储字节;增加这个mysqld变量并再试一次

该表非常庞大,我无法提升binlog_cache_size来满足此请求。如果没有将两个表转储到磁盘并使解析器脱机来扩展其内容,是否有某种方法可以重构查询以更有效地执行我需要做的事情?

我可以做的一些事情(但我希望选择正确/明智的选项):

  • 在两个字段之间创建一个包含外键约束的新表并插入其中,然后删除旧表并重命名新表。
  • 使用MySQL派生/虚拟表创建视图,我可以导出然后重新导入
  • 转储两个表并与w / a解析器进行比较以生成要删除的ID列表

欢迎提出建议!

1 个答案:

答案 0 :(得分:1)

试试这个:

DELETE wcm
FROM wp_commentmeta wcm
LEFT JOIN wp_comments wc ON wc.comment_id = wcm.comment_id
WHERE wc.comment_id IS NULL;