ホームページ >データベース >mysql チュートリアル >MySQL で一般的に使用されるストレージ エンジンの分析
この記事の内容は、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 サイトの他の関連記事を参照してください。