Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.1Mb
HTML Download (Zip) - 7.2Mb


MySQL 5.6 リファレンスマニュアル  /  ...  /  InnoDB テーブルの一括データロード

8.5.4 InnoDB テーブルの一括データロード

これらのパフォーマンスのヒントは、セクション8.2.2.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 に設定します。詳細は、セクション14.6.5.2「構成可能な InnoDB の自動インクリメントロック」を参照してください。

  • 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=latin1;
      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 を非表示カラムとして追加します。ただし、このアプローチでは、パフォーマンスに影響するテーブルの再構築が必要になります。


User Comments
User comments in this section are, as the name implies, provided by MySQL users. The MySQL documentation team is not responsible for, nor do they endorse, any of the information provided here.
Sign Up Login You must be logged in to post a comment.