sql >> データベース >  >> RDS >> Mysql

MySQLに一連の大規模な行をすばやく入力します

    一般的に、次のいずれか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行の場合よりもはるかに速くなることはないと確信しています。



    1. F#初心者:サーバーからデータの配列を取得する

    2. フォームを高速化するためにMicrosoftAccessでADOを非同期的に使用する

    3. 適切なNuGetパッケージがあるにもかかわらず、MySQLコネクタをコンピューターにインストールする必要があるのはなぜですか?

    4. Javaでのコミット時にOracleAQテーブルにエンキューし、JMSクライアントで使用する方法