MySQL には複数のストレージ エンジンがあり、MyISAM と InnoDB の 2 つは一般的に使用されます。これら 2 つのエンジンに関する基本概念をいくつか紹介します (詳細な紹介ではありません)。
MyISAM は MySQL のデフォルトのストレージ エンジンで、従来の ISAM タイプに基づいており、全文検索をサポートしていますが、トランザクションセーフではなく、外部キーをサポートしていません。各 MyISAM テーブルは 3 つのファイルに格納されます。frm ファイルはテーブル定義を格納し、データ ファイルは MYD (MYData)、インデックス ファイルは MYI (MYIndex) です。
InnoDB は、ロールバック、クラッシュ リカバリ、マルチバージョン同時実行制御、ACID トランザクション、および行レベルのロック (InnoDB テーブルの行ロックは絶対的ではありません。MySQL が SQL の実行時にスキャンすることを決定できない場合) をサポートするトランザクション エンジンです。ステートメントのスコープ内では、InnoDB テーブルはテーブル全体 (同様の操作中の SQL ステートメントなど) もロックします。 InnoDB はテーブルとインデックスをテーブルスペースに保存します。テーブルスペースには複数のファイルを含めることができます。
主な違い:
MyISAM は非トランザクション的に安全ですが、InnoDB はトランザクション的に安全です。
MyISAM ロック粒度はテーブル レベルですが、InnoDB は行レベルのロックをサポートします。
MyISAM はフルテキスト タイプのインデックスをサポートしていますが、InnoDB はフルテキスト インデックスをサポートしていません。
MyISAM は比較的シンプルなので、効率の点で InnoDB より優れているため、小規模なアプリケーションでは MyISAM の使用を検討できます。
MyISAM テーブルはファイルとして保存されます。クロスプラットフォームのデータ転送で MyISAM ストレージを使用すると、多くの手間が省けます。
InnoDB テーブルは MyISAM テーブルよりも安全であり、データが失われないようにしながら、非トランザクション テーブルをトランザクション テーブルに切り替えることができます (alter table tablename type=innodb)。
アプリケーション シナリオ:
MyISAM は非トランザクション テーブルを管理します。高速な保存と取得、および全文検索機能を提供します。アプリケーションが多数の SELECT クエリを実行する必要がある場合は、MyISAM の方が良い選択肢です。
InnoDB はトランザクション処理アプリケーションに使用され、ACID トランザクションのサポートを含む数多くの機能を備えています。アプリケーションで大量の INSERT または UPDATE 操作を実行する必要がある場合は、マルチユーザーの同時操作のパフォーマンスを向上できる InnoDB を使用する必要があります。