MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLでINSERT処理を高速化する方法【複数レコードの一括挿入】

MySQLのINSERTを高速化する基本テクニック

MySQLで大量のデータを挿入する場合、1件ずつINSERT文を実行するとオーバーヘッドが大きくなり、処理速度が大幅に低下します。そこで有効なのが、トランザクションを利用した複数レコードの一括挿入です。

以下の構文を使うことで、複数のレコードを同時に挿入し、INSERT処理を高速化できます。

START TRANSACTION;
insert into テーブル名(カラム名1, カラム名2, ...N)
values(値1, 値2, ...N), (値1, 値2, ...N), ...N;
commit;

手順1:デモ用テーブルを作成する

まずは動作確認のためのサンプルテーブルを作成しましょう。学生ID・氏名・年齢を持つシンプルなテーブルです。

mysql> create table insertDemo
    -> (
    -> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> StudentName varchar(20),
    -> StudentAge int
    -> );
Query OK, 0 rows affected (0.72 sec)

手順2:トランザクションを開始して複数レコードを挿入する

次に、START TRANSACTIONでトランザクションを開始し、1つのINSERT文に複数のVALUES句を指定して6件のレコードをまとめて挿入します。

mysql> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into insertDemo(StudentName,StudentAge) values('John',21),('Carol',22),('Bob',21),('David',24),
   -> ('Maxwell',25),('Mike',22);
Query OK, 6 rows affected (0.00 sec)
Records: 6 Duplicates: 0 Warnings: 0

mysql> commit;
Query OK, 0 rows affected (0.14 sec)

このように、6件の挿入がわずか0.00秒で完了しています。コミット時にディスクへの書き込みが一括で行われるため、個別にINSERTを実行する場合と比べて大幅な高速化が期待できます。

手順3:SELECT文で登録結果を確認する

最後に、SELECT文ですべてのレコードが正しく登録されているか確認しましょう。

mysql> select * from insertDemo;

実行結果は以下のとおりです。

+-----------+-------------+------------+
| StudentId | StudentName | StudentAge |
+-----------+-------------+------------+
|        1 | John        |        21 |
|        2 | Carol       |        22 |
|        3 | Bob         |        21 |
|        4 | David       |        24 |
|        5 | Maxwell | 25 |
| 6 | Mike | 22 |
+-----------+-------------+------------+
6 rows in set (0.00 sec)

高速化のポイントまとめ

  • マルチプルINSERT(複数行INSERT):1つのINSERT文に複数のVALUESを指定することで、SQLの解析やネットワーク通信の回数を削減できる。
  • トランザクションの活用:START TRANSACTION〜COMMITでまとめることで、コミットごとのディスク同期処理を1回に抑えられる。
  • AUTO_INCREMENTの活用:主キーを自動採番にすれば、挿入側でIDを意識する必要がない。

大量データの投入が必要なバッチ処理などでは、これらの手法を組み合わせることで、MySQLのINSERT性能を大きく向上させることができます。

  1. JavaでMySQLに接続する方法を解説!JDBC接続の基本コード

    JavaとMySQLを接続するには? JavaアプリケーションからMySQLデータベースに接続するには、JDBC(Java Database Connectivity)を使用します。JDBCは、Javaからリレーショナルデータベースへアクセスするための標準APIであり、MySQL用のJDBCドライバ(Connector/J)をクラスパスに追加しておく必要があります。 以下は、Javaのコードを使ってMySQLに接続する基本的なサンプルです。 MySQL接続のサンプルコード import java.sql.Connection; import java.sql.DriverManager; p

  2. MySQLで複数テーブルの結果をマージする方法|JOINを使った結合手順を解説

    MySQLで2つ以上のテーブルに分かれたデータを1つの結果としてまとめたい場合、JOIN(結合)を使うのが最もシンプルで効果的な方法です。この記事では、実際にテーブルを作成しながら、JOINによる結果のマージ手順をわかりやすく解説します。マージに使用するJOINの基本構文結果をマージするには、以下のような構文でシンプルなJOINを使用します。SELECT aliasName1.yourColumnName1, aliasName1.yourColumnName2, ... aliasName2.yourColumnName1 FROM yourTableName1 aliasN