在其中的另一个表上使用嵌套查询的SQL查询

时间:2013-07-31 19:48:18

标签: mysql

我有两张桌子,我们称之为email_bounces和master_email_list。

master_email_list是~3.5万条记录。

email_bounces约有100,000条记录。

我正在尝试进行查询,如果在email_bounces中找到电子邮件地址,我会在master_email_list中更新bounce = 1。

这就是我所拥有的。

update 'master_email_list' set bounce=1 where email in (select email FROM 'email_bounces')

除了看起来不起作用之外,它会查询,然后无限期挂起(我让它在一夜之间运行过夜,之前运行了大约4个小时)。

非常感谢帮助。

3 个答案:

答案 0 :(得分:0)

使用

update master_email_list l
inner join email_bounces b on b.email = l.email
set bounce = 1 

您还可以尝试在更新期间停用密钥以加快速度:

ALTER TABLE master_email_list DISABLE KEYS;

然后

ALTER TABLE master_email_list ENABLE KEYS;

答案 1 :(得分:0)

使用表别名,您必须设置它。

我正在使用内部联接

update master_email_list mel
   inner join email_bounces eb
     on mel.email = eb.email
     set mel.bounce = 1

答案 2 :(得分:0)

如果这个简单的查询需要几个小时,我只能看到两个可能的原因;

  • 您错过了以master_email_list.email作为第一列的索引。

    创建指数ix_email ON master_email_list(电子邮件);

......应该加快的速度

  • 您持有锁的表上有活动事务。检查您没有未提交的未提交的交易,如果找不到,请检查this answer如何查找。