違い: 1. InnoDB はトランザクションをサポートしていますが、MyISAM はサポートしていません。InnoDB の場合、各 SQL ステートメントはデフォルトでトランザクションとしてカプセル化され、自動的にコミットされるため、速度に影響します。したがって、トランザクションを形成するには、begin と commit の間に複数の SQL ステートメントを配置するのが最適です。 2. InnoDB は外部キーをサポートしますが、MyISAM はサポートしません。外部キーを含む InnoDB テーブルを MYISAM に変換すると失敗します。 3. InnoDB はクラスター化インデックスであり、インデックス構造として B+Tree を使用します。データ ファイルは (主キー) インデックスにバインドされます (テーブル データ ファイル自体は B+Tree で編成されたインデックス構造です)。主キーが存在する必要があり、主キー インデックスの効率は非常に高くなります。ただし、補助インデックスには 2 つのクエリが必要です。最初に主キーをクエリし、次に主キーを通じてデータをクエリします。したがって、主キーが大きすぎると他のインデックスも大きくなるため、主キーは大きすぎてはなりません。 MyISAM は非クラスター化インデックスであり、インデックス構造として B+Tree も使用します。インデックスとデータ ファイルは別々であり、インデックスはデータ ファイルへのポインタを保存します。主キー インデックスとセカンダリ インデックスは独立しています。 つまり、InnoDB の B+ ツリー主キー インデックスのリーフ ノードはデータ ファイルであり、補助インデックスのリーフ ノードは主キーの値です。一方、MyISAM の B+ ツリー主キー インデックスと補助インデックスのリーフ ノードは、どちらもデータ ファイルへのアドレス ポインターです。 4. InnoDB はテーブル内の特定の行数を保存しません。select count(*) from table を実行する場合、テーブル全体をスキャンする必要があります。 MyISAM は、テーブル全体の行数を保存するために変数を使用します。上記のステートメントを実行するときは、変数を読み取るだけでよく、非常に高速です (WHERE 条件を追加できないことに注意してください)。 では、なぜ InnoDB にはこの変数がないのでしょうか? InnoDB のトランザクションの性質上、テーブル内の同時行数はトランザクションごとに異なります。したがって、カウント統計は、クイック クエリの合計行数を保存するのではなく、現在のトランザクションでカウントできる行数を計算します。 InnoDB は、オプティマイザが別のインデックスを使用するように指示しない限り、可能な限り小さいインデックスをトラバースしようとします。セカンダリ インデックスが存在しない場合、InnoDB は他のクラスター化インデックスのトラバースも試行します。 5. InnoDB はフルテキスト インデックスをサポートしていませんが、MyISAM はサポートしています。フルテキスト インデックスの分野では、MyISAM の方がクエリ効率が高速です。PS: InnoDB 5.7 以降はフルテキスト インデックスをサポートしています。 6. MyISAMテーブルは圧縮してクエリできる 7. InnoDBはテーブルレベルと行レベル(デフォルト)のロックをサポートし、MyISAMはテーブルレベルのロックをサポートします。 InnoDB の行ロックは、物理的な行レコードではなくインデックスに実装されます。つまり、アクセスがインデックスにヒットしない場合、行ロックは使用できず、テーブル ロックに退化します。 8. InnoDB テーブルには主キーが必要です (ユーザーが指定しない場合は、テーブルが自動的に主キーを見つけるか生成します)。一方、MyISAM には主キーがありません。 9. Innodb ストレージファイルは frm と ibd ですが、Myisam は frm、MYD、MYI です。 Innodb: frm はテーブル定義ファイル、ibd はデータファイルです Myisam: frm はテーブル定義ファイル、myd はデータファイル、myi はインデックスファイルです 選び方: 1. トランザクションをサポートするかどうか。サポートする場合は、InnoDB を選択してください。サポートしない場合は、MyISAM を検討してください。 2. テーブル内のクエリのほとんどが読み取りクエリである場合は、MyISAM を検討できます。読み取りクエリと書き込みクエリの両方がある場合は、InnoDB を使用してください。 3. システムがクラッシュした後、MyISAM の回復はより困難になります。これは許容できますか? 4. MySQL 5.5 バージョンから、Innodb が MySQL のデフォルト エンジンになりました (以前は MyISAM でした)。これは、その利点が誰の目にも明らかであることを示しています。何を使うべきかわからない場合は、InnoDB を使用してください。少なくとも悪くはありません。 InnoDB が自動インクリメント ID を主キーとして使用することを推奨するのはなぜですか? 回答: 自動インクリメント ID により、挿入が発生するたびに B+ インデックスが右から拡張されるため、B+ ツリーの頻繁なマージと分割が回避されます (UUID を使用する場合と比較して)。文字列の主キーとランダムな主キーを使用すると、データがランダムに挿入されるため、非効率的です。 InnoDBエンジンの4つの主要機能 挿入バッファ、二重書き込み、適応ハッシュインデックス(AHI)、先読み 上記はMySQL MyISAMとInnoDBの違いについての詳しい内容です。MySQL MyISAMとInnoDBについてさらに詳しく知りたい方は、123WORDPRESS.COMの他の関連記事もぜひご覧ください! 以下もご興味があるかもしれません:
|
<<: Nginx で 403 forbidden を解決するための完全な手順
>>: Vueは、商品の数を制御するためのコンポーネントのパッケージ化と使用を実装します。
1. <dl>はリストを定義し、<dt>はリスト内の項目を定義し、<d...
CSS画像結合技術1. 画像のステッチ画像ステッチング技術は、個々の画像を収集する技術です。画像の多...
フォームのコードは図の通りです。スタイルシートがまだ追加されていないため、フォームが整列されておらず...
<テンプレート> <div class="demo">...
ポート マッピングは、Docker を別のコンテナーに接続する唯一の方法ではありません。 Docke...
1. インストール前の準備1. 公式ウェブサイトからUbuntu 20.04のイメージファイルを直接...
結合指数は複合指数とも呼ばれます。複合インデックスの場合: MySQL はインデックス内のフィールド...
最近、サーバー上のアカウントが2つハッキングされ、パスワードが改ざんされました。幸い、まだ使えるアカ...
質問:最近、プロジェクトの統計を行っていたときに、テーブルを上下にスクロールしたときにテーブルの先頭...
1. Linuxシステムにクロスシステムファイル転送ツールをインストールするルートユーザーのルートデ...
序文「大規模なフロントエンド プロジェクト向け」に設計されたフロントエンド フレームワークである A...
1. イベントの簡単な紹介イベントは、MySQL が特定の時間に呼び出す手続き型データベース オブジ...
1. 背景1. フロントエンドはvue + vuex + socket.io-clientを使用しま...
目次1. props/$emit導入コードサンプル2.Vスロット導入コードサンプル3.$refs/ ...
/etc/yum.repos.d/フォルダに入るrabbitmq-erlang.repo ファイルを...