7.2.12 INSERT の高速化
レコードの挿入にかかる時間は、次の要因によって決まります。次の数値は、影響の割合を大まかに示します:
接続: (3)
。
サーバーにクエリを送信: (2)
クエリを解析: (2)
レコードの挿入: (1 x レコード サイズ)
インデックスの挿入: (1 x インデックスの数)
Close: ( 1)
初期化中にデータテーブルを開くコストは、クエリが実行されるたびに 1 回しか行われないため、ここでは考慮されません。
B-treeインデックスの場合、インデックスの数が増えると、レコードの挿入速度がlog Nの割合で低下します。
次の方法を使用して挿入速度を上げることができます:
同じクライアント上で同時に多くのレコードを挿入する場合は、複数の VALUES 値を指定した INSERT ステートメントを使用できます。このアプローチは、単一値の INSERT ステートメントを使用するよりもはるかに高速です (場合によっては高速です)。空ではないデータ テーブルにレコードを追加する場合は、変数Bulk_insert_buffer_size の値を調整して速度を上げることができます。詳細は「5.2.3 サーバシステム変数」を参照してください。
異なるクライアントから大量のレコードを挿入する場合は、INSERT DELAYED ステートメントを使用すると速度が向上する可能性があります。詳細は「14.1.4 INSERT構文」を参照してください。
MyISAM の場合、現時点でレコードが削除されていない限り、SELECT ステートメントの実行中にレコードを挿入できます。
テキスト ファイルをデータ テーブルにロードする場合は、LOAD DATA INFILE を使用できます。これは通常、多数の INSERT ステートメントを使用するよりも 20 倍のコストがかかります。詳細は、「14.1.5 LOAD DATA INFILEの構文」を参照してください。