1. ホーム
  2. マイスル

[解決済み】MyISAMとInnoDBの違いは何ですか?[重複あり]

2022-04-01 09:40:12

質問

この質問は以前にもあったようですが、ほとんどの場合、特定のデータベースやテーブルとの関連で質問されていますね。このサイトでは、2つのエンジンとその違いについて、特定のデータベースに関係なく説明している回答は見当たりません。

将来、テーブルやデータベースを設計する際に、より多くの情報を得た上で判断できるようにしたいので、2つのストレージエンジンの違いについて包括的な回答が欲しいのです。

とはどう違うのですか? マイサム イノDB また、どちらか一方を選択する場合、どのような点に注意すればよいでしょうか?

どのように解決するのですか?

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

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

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

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

ですから、InnoDBとMyISAMのどちらを選択するかは、まずInnoDBが提供する機能が必要なのかどうかを判断することから始めましょう。そうでなければ、MyISAMが検討の対象になります。

アプリケーションがどのようにデータベースを使用するか、テーブルの数、テーブルのサイズ、トランザクションの負荷、select、insert、updateのボリューム、並行処理要件、レプリケーション機能など、問題領域に関するより詳細な議論がなければ、(このフォーラムで)違いに関するより詳しい議論はむしろ現実的ではないでしょう。


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