19

InnoDBはMyISAMよりもはるかに優れていると誰かが私に言った。したがって、テーブルを作成するときは、常にMyISAMではなくInnoDBエンジンを使用する必要がありますか?それとも、両方に大きなメリットがありますか?

4

6 に答える 6

35

MyISAMトランザクションレスでヒープ編成です。レコードはテーブル内の行オフセットによって識別され、インデックスはこのオフセットを行ポインターとして格納します。

InnoDBトランザクションをサポートし、インデックス編成されています。レコードは の値によって識別されPRIMARY KEY(または非表示の内部列がPRIMARY KEY定義されていない)、 に格納されB-Treeます。セカンダリ インデックスは、の値をPRIMARY KEY行ポインターとして格納します。

テーブル全体のスキャンまたはセカンダリ インデックス ルックアップを含むクエリは、通常、MyISAMテーブルの方が高速です。

シークを含むクエリPRIMARY KEYは、通常、InnoDBテーブルの方が高速です。

MyISAMテーブルは、テーブルのメタデータにテーブル内のレコード数を格納します。そのため、クエリは次のようになります。

SELECT  COUNT(*)
FROM    myisamtable

インスタントです。

MyISAMテーブルは操作で完全にロックされDMLます (いくつかの例外を除く)。

InnoDBテーブルは個々のレコードとインデックス ギャップをロックしますが、これらはスキャンされるレコードとギャップであり、WHERE条件に一致するものだけではありません。これにより、一致しないにもかかわらず、レコードがロックされる可能性があります。

InnoDBテーブルは参照整合性をサポートしますFOREIGN KEYMyISAMテーブルにはありません。

両方のエンジンの利点を示すシナリオがいくつかあります。

于 2009-12-28T16:08:41.493 に答える
11

簡単な答え: いいえ、すべきではありません。

各エンジンに関するいくつかのポイント:

InnoDB

  • 外部キーの制限とトランザクションを完全にサポートします。(ACID準拠)
  • 行レベルのロック。
  • おそらくより高速な INSERT ステートメント。(そしておそらくUPDATEも)

MyISAM

  • より高速な SELECT ステートメント。
  • 全文検索のサポート
  • BLOB および TEXT 列に索引を付けることができます
  • InnoDB と比較して最大ストレージ制限の 4 倍 (256TB 対 64TB)

詳しくはマニュアルをご覧ください:

于 2009-12-28T16:24:53.830 に答える
8

簡単に言えば:

InnoDB を使用する必要があります。

  • 取引サポートが必要な場合
  • 外部キーが必要な場合

MyISAM を使用する必要があります。

  • 上記の AND が必要ない場合
  • 速度が必要です(データベース操作の高速化)
于 2009-12-28T16:09:23.303 に答える
4

私見は、すべてのリレーショナルデータベースシステムの中心にあるトランザクションサポートのために、常に優先InnoDBする必要があります.MyISAM

于 2009-12-28T16:09:54.363 に答える
1

InnoDB は完全に ACID に準拠したデータベース エンジンであるため、トランザクションなどのサポートを提供します。そのため、別の方向に最適化される傾向がある MyISAM データベースよりも遅くなる可能性があります。

したがって、トランザクションが必要な場合は、InnoDB (または PostgreSQL などの別の RDBMS) が当然の選択です。

ウィキペディアに合理的な比較があります

于 2009-12-28T16:10:40.350 に答える
0

両方を使用できます。書き込みデータベース/トランザクションに InnoDB を使用できますが、非正規化された MyISAM データベースから読み戻すことができます。これにより、両方の長所が得られます。データは InnoDB からの参照整合性により安全であることがわかっており、MyISAM を使用して好きなだけ高速に読み取ることができます。

于 2009-12-28T16:19:08.197 に答える