一般的に、次のいずれか1つ以上を使用できます。
- トランザクションを開始し、挿入を実行し、コミットします
- 複数の値を1つのクエリへの挿入にパックします
- 挿入を実行する前に制約を削除し、一括挿入後に制約を復元します(主キーを除いて、それについてはよくわかりません)
-
insert into ... select
を使用します 必要に応じて
最初の(トランザクションを使用する)が役立つ可能性が最も高いですが、myisamテーブルで機能するかどうかはわかりませんが、innodbを使用すると、非常にうまく機能します-mysqlを使用するように強制された場合にのみ、postgresqlを使用します。
特定のケースでは、100000行のデータを挿入すると、次のようになります。
INSERT INTO status(id, responseCode, lastUpdate) SELECT @row := @row + 1 as row, 503, NOW() FROM
(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t,
(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t2,
(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t3,
(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t4,
(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t5,
(SELECT @row:=0) t6;
私のマシンでこれをテストしました:
Query OK, 100000 rows affected (0.70 sec)
Records: 100000 Duplicates: 0 Warnings: 0
100000行の場合よりもはるかに速くなることはないと確信しています。