0

我有两张表,我们称它们为 email_bounces 和 master_email_list。

master_email_list 是约 350 万条记录。

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 个小时)。

帮助表示赞赏。

4

3 回答 3

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;
于 2013-07-31T19:50:35.510 回答
0

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

在这个我使用内部连接

update master_email_list mel
   inner join email_bounces eb
     on mel.email = eb.email
     set mel.bounce = 1
于 2013-07-31T19:52:28.860 回答
0

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

  • 您缺少master_email_list.email作为第一列的索引。

    在 master_email_list(email) 上创建索引 ix_email;

...应该会显着加快速度。

  • 您在持有锁的表上有一个活动事务。检查您是否没有未提交的交易待处理,如果您找不到它们,请查看此答案如何查找它们。
于 2013-07-31T20:03:51.937 回答