MySQL InnoDB 挿入パフォーマンスのボトルネック
テスト結果で観察されたように、MyISAM 挿入と InnoDB 挿入の間の重大なパフォーマンス ギャップは、次の原因が考えられます。トランザクションの処理に大きな違いがあります。
InnoDB は、MyISAM とは異なり、トランザクションを実行し、データの一貫性と耐久性を確保します。ただし、トランザクションが明示的に管理されていない場合、InnoDB はデフォルトで暗黙的なトランザクションを使用するため、パフォーマンスが低下します。 InnoDB は、挿入ステートメントごとにトランザクションをディスクにコミットします。これにより、多数の挿入で重大なオーバーヘッドが発生します。
これに対処するには、テストを変更して明示的なトランザクション管理を含める必要があります。ループを START TRANSACTION で開始し、COMMIT で終了することで、挿入操作を 1 つのトランザクションにグループ化でき、パフォーマンスが大幅に向上します。変更されたコードは次のようになります。
test("InnoDB") # START TRANSACTION start = time.time() for rows in data: db.execute(sql,rows) duration = time.time()-start print "inserting the test data took %0.3f seconds"%duration # COMMIT
この最適化により、InnoDB はループの終わりまでトランザクションのコミットを延期できるようになり、暗黙的なトランザクションに関連するパフォーマンスのボトルネックが解消されます。
以上がInnoDB の挿入パフォーマンスが MyISAM より遅いのはなぜですか?また、どうすれば改善できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。