違い: 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は、商品の数を制御するためのコンポーネントのパッケージ化と使用を実装します。
3日間さまざまな困難に遭遇した後、ようやくこの機能を実現しました。正常に実装できる方法を見つける前に...
目次1. はじめに:この場合、通常は 2 つのアプローチがあります。 2. CancelToken ...
シングルページアプリケーションを開発する場合、特定のルートを入力し、パラメータに基づいてサーバーから...
mysql サービスは開始されていますが、接続できません。この問題を解決するにはどうすればよいでしょ...
この記事の例では、検索ボックスでファジークエリを実装するためのNodeの具体的なコードを参考までに共...
まず、action はフォームの属性です。HTML5 では必須の属性値として定義されています。onS...
解決策1完全にアンインストールしてすべてのデータを削除します。まず、MySQLに関連するすべてのプロ...
Centos6.5にmysql5.7.19をインストールするための詳細な手順は次のとおりです。 1....
ソフトウェア開発者であれば、Subversion に精通している必要があります。 Subversio...
テーブルを作成するテーブル order(id varchar(10),date datetime,o...
iOS 1. URLスキームこのソリューションは基本的に、WeChat、QQ 組み込みブラウザ、QQ...
この記事では、参考までにMySQL 8.0.19 winx64のインストールチュートリアルを紹介しま...
MySQL を使用する際、フィールドをソートしたりクエリしたりすることがよくあります。通常は、中国語...
この記事では、主に html + css を使用してサラウンド リフレクション ローディング エフェ...
序文: ietester でドキュメント コードを表示するには、debugbar を使用します。すべ...