0

私はMySQL 5.5を使用しており、次のSQLがあります。

UPDATE t SET val = 1  WHERE id IN ( SELECT id FROM temp1);
UPDATE t SET val = 2  WHERE id IN ( SELECT id FROM temp2 );
UPDATE t SET val = 3  WHERE id IN ( SELECT id FROM temp3 );
UPDATE t SET val = 4  WHERE id IN ( SELECT id FROM temp4 );
UPDATE t SET val = 5  WHERE id IN ( SELECT id FROM temp5 );
UPDATE t SET val = 6  WHERE id IN ( SELECT id FROM temp6 );
UPDATE t SET val = 7  WHERE id IN ( SELECT id FROM temp7 );
UPDATE t SET val = 8  WHERE id IN ( SELECT id FROM temp8 );
UPDATE t SET val = 9  WHERE id IN ( SELECT id FROM temp9 );
UPDATE t SET val = 10 WHERE id IN ( SELECT id FROM temp10 );

temps は私が使用する TEMPORARY テーブルで、テーブルには約 10,000 のエントリがあり、この SQL ステートメントの実行を完了するのに約 30 秒かかります。また、一時テーブルからのすべてのエントリの合計は、t のエントリ数に等しくなります。

これを最適化する方法についてアドバイスをいただけますか?

ありがとう。

4

1 に答える 1

1

まず、id列の「t」にインデックスがあるかどうかを確認します(主キーが最適なインデックスです)

次に、次の方法でバリアントのベンチマークを試みます。

1.

update t, (
select 1 as v, id from temp1
union all
select 2, id from temp2
...
) as q set val=q.v where t.id=q.id

2.

truncate table t; -- note deletion of all from table t
insert into t (id, val)
select id, val from temp1
union all
select id, val from temp2
...

于 2013-10-10T19:14:31.853 に答える