0

2 つのテーブルがあります。これらを 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

その単純なクエリに何時間もかかる場合、考えられる理由は 2 つしかありません。

  • master_email_list.email最初の列としてのインデックスがありません。

    CREATE INDEX ix_email ON master_email_list(email);

...大幅にスピードアップするはずです。

  • ロックを保持しているテーブルにアクティブなトランザクションがあります。保留中のコミットされていないトランザクションがないことを確認してください。それらが見つからない場合は、この回答を確認して探してください。
于 2013-07-31T20:03:51.937 に答える