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

时间:2011-05-23 20:20:00

标签: mysql

我知道之前有人问过这个问题,但这个问题有一个转折点。 我有一个大约1.5M记录的电子邮件表(表1)。

我要检查另一个表(table2),它有大约80K记录,我需要从table1删除电子邮件地址与table1匹配。

我尝试从table1删除其中的电子邮件(从table2中选择电子邮件),但MySQL抛出错误。 错误代码:1205 超过锁定等待超时;尝试重新启动事务 (50404毫秒)

我无法用PHP做,因为我还有大约5个像table2这样的表,我需要从table1中过滤。

我想在MySQL中这样做,因为这是我们最安全的路线,但我想要一个可以在几分钟内(一小时内)运行的查询并给出结果。

提前致谢。

P.S:还剩1天送货。 : - )

3 个答案:

答案 0 :(得分:2)

尝试这种方式。 IN条款可能非常慢。

delete table1.*
from table1
left join table2
on table1.email = table2.mail
where table2.mail is not null

答案 1 :(得分:0)

您可以在my.cnf中提高等待超时值:

innodb_lock_wait_timeout = 250

答案 2 :(得分:0)

更新此答案,因为我终于做到了。

  1. 我在电子邮件上删除了全文索引,并在电子邮件上创建了一个新的100个字符索引。
  2. 我认为使用简单的IN查询来匹配表
  3. 整个过程需要几秒钟而不是几分钟/小时。
  4. 感谢您的帮助。我感激不尽。

    很多问候