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