MySQL 8.0 リファレンスマニュアル MySQL NDB Cluster 8.0 を含む
このページは機械翻訳したものです。
これらのパフォーマンスのヒントは、セクション8.2.5.1「INSERT ステートメントの最適化」の高速挿入の一般的なガイドラインを補足するものです。
InnoDB
にデータをインポートする場合、自動コミットモードでは挿入のたびに、ディスクへのログのフラッシュを実行するため、それをオフにします。 インポート操作時に自動コミットを無効にするには、それを、SET autocommit
ステートメントと COMMIT
ステートメントで囲みます。
SET autocommit=0;
... SQL import statements ...
COMMIT;
mysqldump オプション --opt
は、それらを SET autocommit
ステートメントと COMMIT
ステートメントで囲まなくても、InnoDB
テーブルに高速にインポートするダンプファイルを作成します。
副キーに UNIQUE
制約がある場合、インポートセッション中に一意性チェックを一時的にオフにすることで、テーブルインポートを高速化できます。
SET unique_checks=0;
... SQL import statements ...
SET unique_checks=1;
大きなテーブルの場合、InnoDB
はその変更バッファを使用してセカンダリインデックスレコードをバッチで書き込むことができるため、これによりディスク I/O が大量に節約されます。 データに重複キーが含まれていないことを確認してください。
テーブルに FOREIGN KEY
制約がある場合、インポートセッションの間の外部キーチェックをオフにすることで、テーブルインポートを高速化できます。
SET foreign_key_checks=0;
... SQL import statements ...
SET foreign_key_checks=1;
大きいテーブルの場合、これにより、大量のディスク I/O を節約できます。
多くの行を挿入する必要がある場合、複数行 INSERT
構文を使用して、クライアントとサーバー間の通信オーバーヘッドを軽減します。
INSERT INTO yourtable VALUES (1,2), (5,5), ...;
このヒントは、InnoDB
テーブルだけではなく、任意のテーブルへの挿入に有効です。
自動増分カラムを含むテーブルに一括挿入を実行する場合は、innodb_autoinc_lock_mode
を 1 (連続) ではなく 2 (インターリーブ) に設定します。 詳細は、セクション15.6.1.6「InnoDB での AUTO_INCREMENT 処理」 を参照してください。
一括挿入を実行する場合は、PRIMARY KEY
の順序で行を挿入する方が高速です。 InnoDB
テーブルでは clustered index が使用されるため、PRIMARY KEY
の順序で比較的高速にデータを使用できます。 PRIMARY KEY
順序での一括挿入の実行は、バッファプール内に完全に収まらないテーブルで特に重要です。
InnoDB
FULLTEXT
インデックスにデータをロードする場合の最高のパフォーマンスのため、次の一連のステップに従います。
テーブル作成時に、FTS_DOC_ID_INDEX
という一意のインデックスで、型 BIGINT UNSIGNED NOT NULL
のカラム FTS_DOC_ID
を定義します。 例:
CREATE TABLE t1 ( FTS_DOC_ID BIGINT unsigned NOT NULL AUTO_INCREMENT, title varchar(255) NOT NULL DEFAULT '', text mediumtext NOT NULL, PRIMARY KEY (`FTS_DOC_ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE UNIQUE INDEX FTS_DOC_ID_INDEX on t1(FTS_DOC_ID);
テーブルにデータをロードします。
データがロードされたら、FULLTEXT
インデックスを作成します。
テーブル作成時に FTS_DOC_ID
カラムを追加する場合、FTS_DOC_ID
は各 INSERT
または UPDATE
によって単調に増分される必要があるため、FULLTEXT
インデックス設定されたカラムが更新されたときに、FTS_DOC_ID
カラムが更新されることを確認します。 テーブルの作成時に FTS_DOC_ID
を追加せずに、InnoDB
で DOC ID を管理する場合、InnoDB
は、次の CREATE FULLTEXT INDEX
コールで FTS_DOC_ID
を非表示カラムとして追加します。 ただし、このアプローチでは、パフォーマンスに影響を与える可能性のあるテーブルの再構築が必要です。