UPDATE table1
INNER JOIN table2
ON table1.var1=table2.var1
SET table1.var2=table2.var2
私のテーブルには約 975,000 行ありますが、これには時間がかかることがわかっています。これを書く良い方法はありますか?
ありがとう!
クエリ:
UPDATE table1 INNER JOIN
table2
ON table1.var1 = table2.var1
SET table1.var2 = table2.var2;
アプリオリに、これは問題ないようです。table1
私が見ることができる主な問題は、 からへの 1 対多の関係table2
です。その場合、 からの複数の行が からtable2
の特定の行に一致する可能性がありtable1
ます。このような場合、MySQL は任意の値を割り当てます。
次のような 1 つの値を選択することで、これを修正できますmin()
。
UPDATE table1 INNER JOIN
(select var1, min(var2) as var2
from table2
group by var1
) t2
ON table1.var1 = t2.var1
SET table1.var2 = t2.var2;
パフォーマンス上の理由から、 にインデックスを作成する必要がありますtable2(var1, var2)
。両方の列をインデックスに含めることで、クエリはインデックスのみを使用できるようになり、テーブルから直接行をフェッチする必要がなくなります。