2
UPDATE table1  
INNER JOIN table2  
ON table1.var1=table2.var1  
SET table1.var2=table2.var2

私のテーブルには約 975,000 行ありますが、これには時間がかかることがわかっています。これを書く良い方法はありますか?

ありがとう!

4

2 に答える 2

0

クエリ:

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)。両方の列をインデックスに含めることで、クエリはインデックスのみを使用できるようになり、テーブルから直接行をフェッチする必要がなくなります。

于 2013-07-17T00:34:25.080 に答える