ホームページ  >  記事  >  データベース  >  MySQL における InnoDB と MyISAM の比較分析

MySQL における InnoDB と MyISAM の比較分析

WBOY
WBOY転載
2023-06-02 16:16:351385ブラウズ

InnoDB と MyISAM の比較

1. ストレージ構造

MyISAM: 各 MyISAM はディスク上の 3 つのファイルに保存されます。それらは、テーブル定義ファイル、データ ファイル、インデックス ファイルです。最初のファイルの名前はテーブルの名前で始まり、拡張子はファイルの種類を示します。 .frm ファイルにはテーブル定義が保存されます。データ ファイルの拡張子は .MYD (MYData) です。インデックスファイルの拡張子は.MYI(MYIndex)です。

InnoDB: すべてのテーブルは同じデータ ファイル (または複数のファイル、または独立したテーブル スペース ファイル) に保存されます。InnoDB テーブルのサイズは、オペレーティング システム ファイルのサイズによってのみ制限されます。通常は 2GB。

2. ストレージ スペース

MyISAM: MyISAM は 3 つの異なるストレージ形式をサポートしています: 静的テーブル (デフォルト。ただし、データの末尾にスペースを含めることはできないことに注意してください)削除されます)、動的テーブル、圧縮テーブル。テーブルが作成され、データがインポートされた後は、変更操作は実行されません。圧縮テーブルを使用すると、ディスク領域の使用量を大幅に削減できます。

InnoDB: より多くのメモリとストレージが必要です。データとインデックスをキャッシュするためにメイン メモリ内に独自の専用バッファ プールを確立します。

3. 移植性、バックアップ、リカバリ

MyISAM: データはファイルの形式で保存されるため、クロスプラットフォームのデータ転送に非常に便利です。バックアップおよびリカバリ中にテーブルに対して個別に操作を実行できます。

InnoDB: 無料のソリューションには、データ ファイルのコピー、binlog のバックアップ、または mysqldump の使用が含まれますが、データ ボリュームが数十 GB に達すると比較的困難になります。

4. トランザクション サポート

MyISAM: パフォーマンスに重点を置いています。各クエリはアトミックであり、その実行時間は InnoDB タイプよりも高速ですが、取引のサポートも致します。

InnoDB: トランザクション サポート、外部キー、その他の高度なデータベース機能を提供します。トランザクション (コミット)、ロールバック (ロールバック)、およびクラッシュ回復機能を備えたトランザクションセーフ (ACID 準拠) テーブル。

5. AUTO_INCREMENT

MyISAM: 他のフィールドとの結合インデックスを作成できます。エンジンの自動拡張列はインデックスである必要があります。結合インデックスの場合、自動拡張列は最初の列である必要はありません。前の列に基づいて並べ替えたり増分したりできます。

InnoDB: InnoDB には、このフィールドのみを含むインデックスが含まれている必要があります。エンジンの自動拡張列はインデックスである必要があり、それが複合インデックスの場合は、複合インデックスの最初の列でもある必要があります。

6. テーブル ロックの違い

MyISAM: テーブル レベルのロックのみがサポートされており、ユーザーが myisam テーブルを操作する場合、select、update、delete、insert ステートメントはすべてサポートされます。ロックすると、ロックされたテーブルが挿入同時実行性を満たしている場合、テーブルの最後に新しいデータを挿入できます。

InnoDB: トランザクションと行レベルのロックのサポートは、innodb の最大の機能です。行ロックにより、マルチユーザーの同時操作のパフォーマンスが大幅に向上します。ただし、InnoDB の行ロックは WHERE の主キーに対してのみ有効であり、主キー以外の WHERE はテーブル全体をロックします。

7. フルテキスト インデックス

MyISAM: FULLTEXT 型のフルテキスト インデックスをサポートします

InnoDB: FULLTEXT 型のフルテキスト インデックスをサポートしません、ただし innodb は使用できます。 sphinx プラグインは全文インデックス作成をサポートしており、効果はより優れています。

8. テーブルの主キー

MyISAM: インデックスと主キーのないテーブルの存在を許可します。インデックスは行が保存されるアドレスです。

InnoDB: 主キーまたは空でない一意のインデックスが設定されていない場合、6 バイトの主キー (ユーザーには表示されません) が自動的に生成されます。データは主キーの一部であり、追加のIndex はプライマリ インデックスの値を保存します。

9. テーブル内の特定の行数

MyISAM: テーブル内の総行数を保存します。テーブル; 直接取り出されます。

InnoDB: テーブル内の総行数は保存されません。select count(*) from table を使用すると、テーブル全体を走査することになり、大量のコストがかかります。 wehre 条件を追加した後、myisam と innodb がそれを処理します。

10. CRUD 操作

MyISAM: 多数の SELECT を実行する場合は、MyISAM の方が良い選択です。

InnoDB: データで大量の INSERT または UPDATE が実行される場合は、パフォーマンス上の理由から InnoDB テーブルを使用する必要があります。

11. 外部キー

MyISAM: サポートされていません

InnoDB: サポートされています

以上がMySQL における InnoDB と MyISAM の比較分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。