MyISAM
        ストレージエンジンでは、特定のテーブルに対する読み取りと書き込みの競合を軽減するために、同時挿入がサポートされています。MyISAM
        テーブルでは、データファイルに欠落
        (データファイルの途中に削除された行)
        がない場合、SELECT
        ステートメントでテーブルの行を読み取るのと同時に、INSERT
        ステートメントを実行してテーブルの末尾に行を追加できます。複数の
        INSERT
        ステートメントがある場合、それらはキューに入れられ、SELECT
        ステートメントと同時に順に実行されます。
      
        concurrent_insert
        システム変数を設定して、同時挿入の処理を変更できます。デフォルトでは、この変数は
        1
        に設定され、同時挿入は上記のように処理されます。concurrent_insert
        が 0
        に設定された場合、同時挿入は無効になります。2
        に設定された場合、テーブルに削除された行があっても、テーブル末尾への同時挿入は許可されます。concurrent_insert
        システム変数の説明も参照してください。
      
        同時挿入が使用できる状況下では、INSERT
        ステートメントの
        DELAYED
        修飾子を使用する必要はほとんどありません。項8.2.5.2. 「INSERT DELAYED 構文」
        を参照してください。
      
        バイナリログを使用している場合、同時挿入は
        CREATE ... SELECT または
        INSERT
        ... SELECT
        ステートメントの一般的な挿入に変換されます。このことで、バックアップ演算中にログを適用することでテーブルの正確なコピーを再作成することができます。詳しくはThe Binary Logを参照してください。また、これらのステートメントに対しては選択元のテーブルに
        read
        ロックが設定され、そのテーブルへの挿入がブロックされます。その結果、そのテーブルに対する同時挿入も待機することになります。
      
        LOAD
        DATA INFILE で同時挿入
        (つまり、途中に空きブロックを含まない)
        の条件を満たす MyISAM
        テーブルを使用して
        CONCURRENT
        を指定する場合、ほかのセッションは
        LOAD DATA
        実行中にテーブルからデータを取得できます。CONCURRENT
        オプションを使用すると、同時にテーブルを使用しているほかのセッションがない場合でも、LOAD
        DATA
        のパフォーマンスに多少の影響があります。
      
        もし HIGH_PRIORITY
        を指定すると、サーバーが
        --low-priority-updates
        オプションでスタートされている場合その効果が無効になります。また、並行挿入も利用されなくなります。
      
        LOCK
        TABLE の場合、READ
        LOCAL と READ
        の違いは、READ LOCAL
        では、ロックされている間に、衝突しない
        INSERT
        ステートメント (同時挿入)
        の実行が許可されるということです。しかし、ロックを保持している間にサーバー外部のプロセスを使用してデータベースを操作する場合、これを使用することはできません。
      

