問題:
大きな乱数をキーとして挿入する場合MySQL InnoDB をテーブルに挿入すると、MyISAM に比べて挿入速度が大幅に遅くなります。たとえば、1,000 万行のテーブルに 100 万行を挿入するには、MyISAM では 6 秒かかりますが、InnoDB では 3,433 秒かかります。
原因:
主な理由この違いは、InnoDB のトランザクション サポート メカニズムにあります。中間バッファリングを行わずにデータをディスクに直接保存する MyISAM とは異なり、InnoDB は挿入ステートメントごとにディスクへのログ フラッシュを実行します。この各ステートメントのコミット動作は、パフォーマンスに大きな影響を与えます。
解決策:
InnoDB の挿入速度を最適化するには、明示的なトランザクションを使用することをお勧めします。トランザクション内に挿入ステートメントをカプセル化すると、すべてのステートメントが実行されるまでコミット操作を延期できます。このアプローチにより、必要なディスク フラッシュの数が大幅に減り、挿入速度が向上します。
この解決策を適用するには、挿入ループの前後に次のコマンドを実行します。
挿入前ループ:
START TRANSACTION;
挿入後ループ:
COMMIT;
この手法を実装すると、InnoDB のトランザクション サポートとデータ整合性機能の恩恵を受けながら、InnoDB の挿入パフォーマンスを大幅に加速し、MyISAM と同等の速度を得ることができます。
以上がMySQL InnoDB の挿入は MyISAM の挿入よりもはるかに遅いのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。