この質問は以前にも聞かれたことがあると思いますが、ほとんどの場合、特定のデータベースまたはテーブルに関連して尋ねられます。このサイトでは、誰かの特定のデータベースに関係なく、2 つのエンジンとその違いを説明する答えを見つけることができません。
テーブルまたはデータベースの設計に関して、将来的にはより多くの情報に基づいた決定を下せるようにしたいので、2 つのストレージ エンジンの違いに関する包括的な回答を探しています。
InnoDB と MyISAM の主な違い (「テーブルまたはデータベースの設計に関して」について質問されました) は、「参照整合性」と「トランザクション」のサポートです。
データベースで外部キー制約を適用する必要がある場合、またはデータベースでトランザクションをサポートする必要がある場合 (つまり、2 つ以上の DML 操作によって行われた変更は、単一の作業単位として処理され、すべての変更が適用されるか、すべての変更が元に戻されます)。 MyISAM エンジンにはこれらの機能がないため、InnoDB エンジンを選択します。
これらが2つの大きな違いです。もう 1 つの大きな違いは、同時実行性です。MyISAM を使用すると、DML ステートメントはテーブルの排他ロックを取得し、そのロックが保持されている間、他のセッションはテーブルに対して SELECT または DML 操作を実行できません。
あなたが質問した 2 つの特定のエンジン (InnoDB と MyISAM) には、異なる設計目標があります。MySQL には、独自の設計目標を持つ他のストレージ エンジンもあります。
したがって、InnoDB と MyISAM のどちらを選択するかの最初のステップは、InnoDB が提供する機能が必要かどうかを判断することです。そうでない場合は、MyISAM を検討してください。
アプリケーションがデータベースをどのように使用するか、テーブルの数、テーブルのサイズ、トランザクションの負荷、select の量など、問題領域に関するより詳細な議論がなければ、相違点についてより詳細に議論することは (このフォーラムでは) かなり非現実的です。 、挿入、更新、同時実行要件、レプリケーション機能など。
データベースの論理設計は、データ分析とユーザー要件を中心にすべきです。リレーショナル データベースを使用するという選択はその後に行われ、リレーショナル データベース管理システムとして MySQL が選択され、さらに各テーブルのストレージ エンジンが選択されることになります。
マイサム:
INNODB: