微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果另一个表中存在数据,则从庞大的MySQL表中删除

如何解决如果另一个表中存在数据,则从庞大的MySQL表中删除

| 我知道有人问过这个人,但是这个人有一个错误。 我收到了约150万条记录的电子邮件表(表1)。 我必须对照具有约80K记录的另一个表(table2)进行检查,并且需要从电子邮件地址与table1匹配的table1中删除。 我尝试从中删除电子邮件的表1中删除(从表2中选择电子邮件),但是MysqL抛出错误错误代码:1205 超过了锁定等待超时;尝试重新启动事务 (耗时50404毫秒) 我无法使用PHP,因为我还有大约5个以上的表(如table2)需要从table1进行过滤。 我想在MysqL中执行此操作,因为这是我们最安全的路线,但是我希望查询可以在几分钟(不到一个小时)内运行并给出结果。 提前致谢。 附注:还剩1天可以送达。 :-)     

解决方法

尝试这种方式。
IN
子句可能很慢。
delete table1.*
from table1
left join table2
on table1.email = table2.mail
where table2.mail is not null
    ,您可以在my.cnf中提高等待超时值:
innodb_lock_wait_timeout = 250
    ,更新此答案,因为我终于做到了。 我在电子邮件上删除了全文索引,并在电子邮件上新建了100个字符的索引。 我认为使用简单的IN查询来匹配表 整个过程只需要几秒钟,而不是几分钟/几小时。 谢谢你的帮助。我也很感激。 问候     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。