0

UPDATE を使用して、m2 を n1 に一致させ、n2 で対応する値を見つけ、それを m3 に挿入することで、m3 の欠損値を埋めています。テーブル mmm には 250 万行があり、テーブル nnn には 55,000 行があります。

以下のクエリは両方とも機能しますが、問題はパフォーマンスです。現在、mmm を少しずつ更新しています。nnn を最初の 10,000 行に減らしました。その場合、この部分的なクエリは、7 時間後に達成したいことの約 18% を完了します。このアプローチの問題点は、この方法で約 10 回のルックアップを行う必要があることです。私はこれが多くの計算であることを知っていますが、もっと良い方法があると考えました.

このプロセスをスピードアップする方法はありますか? フィードバックに感謝します。

クエリ #1

UPDATE mmm, nnn
SET mmm.m3 = nnn.n2
WHERE mmm.m2 = nnn.n1

クエリ #2

UPDATE  mmm a
   INNER JOIN nnn b
      ON b.n1 = a.m2
SET a.m3 = b.n2
WHERE   b.n1 = a.m2 

テーブルうーん(組み合わせだけはユニーク)

m1            m2             m3
0002-1962     0025117388   
0002-1962     14644418453    
0003-2417     0026708363

テーブル nnn (n1 は一意)

n1            n2
0025117388    1111-2222 
14644418453   1515-2323
0026708363    1515-2323

データベース構造:

CREATE TABLE `mmm` (
  `m1` char(9) NOT NULL DEFAULT '',
  `m2` varchar(11) NOT NULL DEFAULT '',
  `m3` char(9) NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8

CREATE TABLE `nnn` (
  `n1` varchar(11) NOT NULL DEFAULT '',
  `n2` char(9) NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8
4

1 に答える 1