272

この質問は以前にも聞かれたことがあると思いますが、ほとんどの場合、特定のデータベースまたはテーブルに関連して尋ねられます。このサイトでは、誰かの特定のデータベースに関係なく、2 つのエンジンとその違いを説明する答えを見つけることができません。

テーブルまたはデータベースの設計に関して、将来的にはより多くの情報に基づいた決定を下せるようにしたいので、2 つのストレージ エンジンの違いに関する包括的な回答を探しています。

MyISAMInnoDBの違いは何ですか? また、どちらかを決定しようとするときに何を探す必要がありますか?

4

2 に答える 2

433

InnoDB と MyISAM の主な違い (「テーブルまたはデータベースの設計に関して」について質問されました) は、「参照整合性」と「トランザクション」のサポートです。

データベースで外部キー制約を適用する必要がある場合、またはデータベースでトランザクションをサポートする必要がある場合 (つまり、2 つ以上の DML 操作によって行われた変更は、単一の作業単位として処理され、すべての変更が適用されるか、すべての変更が元に戻されます)。 MyISAM エンジンにはこれらの機能がないため、InnoDB エンジンを選択します。

これらが2つの大きな違いです。もう 1 つの大きな違いは、同時実行性です。MyISAM を使用すると、DML ステートメントはテーブルの排他ロックを取得し、そのロックが保持されている間、他のセッションはテーブルに対して SELECT または DML 操作を実行できません。

あなたが質問した 2 つの特定のエンジン (InnoDB と MyISAM) には、異なる設計目標があります。MySQL には、独自の設計目標を持つ他のストレージ エンジンもあります。

したがって、InnoDB と MyISAM のどちらを選択するかの最初のステップは、InnoDB が提供する機能が必要かどうかを判断することです。そうでない場合は、MyISAM を検討してください。

アプリケーションがデータベースをどのように使用するか、テーブルの数、テーブルのサイズ、トランザクションの負荷、select の量など、問題領域に関するより詳細な議論がなければ、相違点についてより詳細に議論することは (このフォーラムでは) かなり非現実的です。 、挿入、更新、同時実行要件、レプリケーション機能など。


データベースの論理設計は、データ分析とユーザー要件を中心にすべきです。リレーショナル データベースを使用するという選択はその後に行われ、リレーショナル データベース管理システムとして MySQL が選択され、さらに各テーブルのストレージ エンジンが選択されることになります。

于 2012-09-27T05:33:43.997 に答える
353

マイサム:

  1. MYISAM はテーブル レベルのロックをサポートします
  2. スピードの必要性のために設計された MyISAM
  3. MyISAM は外部キーをサポートしていないため、MYISAM を DBMS として MySQL と呼びます
  4. MyISAM は、3 つの異なるファイルを使用して、テーブル、データ、およびインデックスをディスク領域に保存します。(テーブル名.FRM、テーブル名.MYD、テーブル名.MYI)
  5. MYISAM はトランザクションをサポートしていません。MYISAM を使用してコミットおよびロールバックすることはできません。コマンドを発行したら完了です。
  6. MYISAM は全文検索をサポートしています
  7. テーブルがより静的で、選択が多く、更新と削除が少ない場合は、MyISAM を使用できます。

INNODB:

  1. InnoDB は行レベルのロックをサポートしています
  2. 大量のデータを処理する際に最大のパフォーマンスを発揮するように設計された InnoDB
  3. InnoDB は外部キーをサポートしているため、MySQL と呼ばれる InnoDB は RDBMS です
  4. InnoDB はそのテーブルとインデックスをテーブルスペースに格納します
  5. InnoDB はトランザクションをサポートしています。InnoDB でコミットおよびロールバックできます
于 2013-04-29T02:55:57.517 に答える