別のテーブルのIDに基づいてテーブルを更新しようとしていますが、パフォーマンス上の問題があります。 table_to_updateに150,000行、table_to_get_dataに400,000行あります。IDに基づくMySQLアップデート遅い(150,000レコード)
表は、データを取得するために +----+-----------------+ | id | field_to_update | +----+-----------------+ | 1 | orange | | 2 | apple | | 3 | pear | | 1 | orange | +----+-----------------+
表を更新する +----+-----------------+ | id | field | +----+-----------------+ | 1 | orange | | 2 | apple | | 3 | pear | +----+-----------------+
だから私が試した3種類の方法:
方法1:
UPDATE table_to_update t1, table_to_get_data t2
SET t1.field_to_update = t2.field
WHERE t1.id = t2.id
方法2:
UPDATE table_to_update
JOIN table_to_get_data
ON table_to_update.id = table_to_get_data.id
SET table_to_update.field_to_update = table_to_get_data.field
方法3:
UPDATE table_to_update
LEFT JOIN table_to_get_data
ON table_to_update.id = table_to_get_data.id
SET table_to_update.field_to_update = table_to_get_data.field
これまでのところ、方法3は、それが1000行を更新するのにかかる時間を計算し、しかし、最速のようです、それは全体の更新を完了するために私に12時間かかります表。テーブルを更新するより効率的な方法はありますか?
EDIT: 追加EXPLAIN表 EXPLAIN Table
列のインデックスは正しく設定されていますか?また、 'EXPLAIN'を実行して、クエリがどのように実行されるかを調べることもできます。 –
Cyclonecode
create table queryを表示し、それぞれの3つのSQLメソッドの前にExplainも実行します。 – Naruto
クエリの説明を表示する –