web-dev-qa-db-ja.com

MyISAMとInnoDBの違いは何ですか?

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

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

MyISAMInnoDB の違いは何ですか?また、どちらを選択するときに何を探すべきですか?

247
Scott

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

データベースで外部キー制約を強制する必要がある場合、またはデータベースでトランザクション(1つの作業単位として扱われる2つ以上のDML操作による変更、すべての変更の適用、またはすべての変更の取り消し)が必要な場合これらの機能はMyISAMエンジンには存在しないため、InnoDBエンジンを選択します。

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

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

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

相違点についてのより詳細な議論は(このフォーラムでは)問題空間についてのより詳細な議論がなければかなり実用的ではありません...アプリケーションがデータベースをどのように使用するか、テーブルの数、挿入、更新、同時実行性の要件、レプリケーション機能など.


データベースの論理設計は、データ分析とユーザーの要件を中心にしなければなりません。リレーショナルデータベースを使用するという選択は後になるでしょうし、リレーショナルデータベース管理システムとしてMySQLを選ぶこと、そして各テーブルのためのストレージエンジンを選択することも後になるでしょう。

404
spencer7593

マイサム:

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

INNODB:

  1. InnoDBは行レベルロックをサポートします
  2. InnoDBは、大量のデータを処理する際に最大限のパフォーマンスを発揮するように設計されています
  3. InnoDBは外部キーをサポートしているので、InnoDBでMySQLを呼び出すのはRDBMSです。
  4. InnoDBはそのテーブルとインデックスをテーブルスペースに保存します
  5. InnoDBはトランザクションをサポートしています。 InnoDBを使用してコミットおよびロールバックできます
337
medina