1. 同じクライアントから同時に多数の行が挿入される場合は、複数の VALUE を含む INSERT ステートメントを使用して複数の行を同時に挿入します。これは、単一行の INSERT ステートメントを使用するよりも高速です (場合によっては数倍高速です)。空ではないテーブルにデータを追加する場合は、bulk_insert_buffer_size 変数を調整してデータの挿入を高速化できます。 「サーバーシステム変数」を参照してください。
2. 異なるクライアントから多数の行を挿入する場合は、INSERT DELAYED ステートメントを使用してプロセスを高速化できます。セクション13.2.4「INSERT 構文」を参照してください。
3. MyISAM では、テーブルに削除された行がない場合、SELECT ステートメントの実行中に行を挿入できます。
4. テキスト ファイルからテーブルをロードする場合は、LOAD DATA INFILE を使用します。これは通常、多くの INSERT ステートメントを使用するよりも 20 倍高速です。 「LOAD DATA INFILE 構文」を参照してください。
5. テーブルに多くのインデックスがある場合、LOAD DATA INFILE を高速化するためにさらに多くの作業が必要になる場合があります。次のプロセスを使用します:
1) CREATE TABLE を使用してテーブルを選択的に作成します。
2) FLUSH TABLES ステートメントまたはコマンド mysqladmin flash-tables を実行します。
3) myisamchk --keys-used=0 -rq /path/to/db/tbl_name を使用します。これにより、テーブルのすべてのインデックスが使用されなくなります。
4). LOAD DATA INFILE を使用してテーブルにデータを挿入します。インデックスが更新されないため、非常に高速です。
5)。テーブルを後で読み込むだけの場合は、myisampack を使用して圧縮します。 「圧縮テーブルのプロパティ」を参照してください。
6) myisamchk -r -q /path/to/db/tbl_name を使用してインデックスを再作成します。これにより、ディスクに書き込む前にメモリ内にインデックス ツリーが作成され、大規模なディスク検索が回避されるため高速になります。結果として得られるインデックス ツリーも完全にバランスが取れています。
7) FLUSH TABLES ステートメントまたは mysqladmin flash-tables コマンドを実行します。
6. テーブルをロックすると、複数のステートメントで実行される INSERT 操作が高速化されます。
* 書き込みテーブルをロックします;* 値に挿入します (1,23),(2,34),(4,33);
* 値に挿入します (8,26),(6,29);
* テーブルのロックを解除します;
トランザクションテーブルの場合、挿入を高速化するために、LOCK TABLES の代わりに BEGIN と COMMIT を使用する必要があります。