Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.2Mb
HTML Download (TGZ) - 7.2Mb
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
Sign Up Login You must be logged in to post a comment.