ホームページ  >  記事  >  データベース  >  MySQL で一般的に使用されるストレージ エンジンの分析

MySQL で一般的に使用されるストレージ エンジンの分析

不言
不言転載
2018-11-23 17:25:142626ブラウズ

この記事の内容は、MySQL でよく使用されるストレージ エンジンの分析に関するもので、必要な方は参考にしていただければ幸いです。

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

(MYData)です。インデックスファイルの拡張子は.MYI(MYIndex)です。

MyISAM は、初期の ISAM (Indexed Sequential Access Method: インデックス順次アクセス方式) から改良された、MySQL (バージョン 5.5 以前) のデフォルトのデータベース エンジンです。パフォーマンスは優れていますが、トランザクション処理をサポートしていないという欠点があります。

InnoDB は、MySQL のデータベース エンジンの 1 つであり、MySQL AB によってリリースされたバイナリ標準の 1 つです。従来の ISAM や MyISAM と比較して、InnoDB の最大の特徴はトランザクションをサポートしていることです。

MyISAM と InnoDB の違いは何ですか?要約は次のとおりです。

1. ストレージ構造

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

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

2. ストレージ スペース

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 バイトの主キー (ユーザーには表示されません) が自動的に生成されます。データは主インデックスの一部であり、追加のインデックスはプライマリ インデックスの値を保存します。

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

MyISAM: table から count() を選択すると、テーブル内の行の合計数が保存されます。値は直接取り出されます。

InnoDB: テーブル内の行の合計数は保存されません。select count() from table; を使用すると、テーブル全体がスキャンされ、大量のコストがかかります。条件、myisam および innodb は同じ方法で処理します。

10. CURD 操作

MyISAM: 多数の SELECT を実行する場合は、MyISAM の方が適しています。

InnoDB: データで大量の INSERT または UPDATE が実行される場合は、パフォーマンス上の理由から InnoDB テーブルを使用する必要があります。 DELETE は InnoDB よりもパフォーマンスの点で優れていますが、DELETE FROM テーブルの場合、InnoDB 上の大量のデータを含むテーブルをクリアしたい場合、InnoDB はテーブルを再作成せず、行ごとに削除します。 truncate table コマンドを使用するのが最善です。

11. 外部キー

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

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

上記の分析を通じて、基本的には次のようになります。 InnoDB は MyISAM エンジンを置き換えるために使用されると考えられていますが、実際のアプリケーションでは、具体的な状況を自分で検討できます。

以上がMySQL で一般的に使用されるストレージ エンジンの分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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