ホームページ >データベース >mysql チュートリアル >MySQLストレージエンジンの詳しい説明

MySQLストレージエンジンの詳しい説明

步履不停
步履不停オリジナル
2019-06-18 17:40:192393ブラウズ

MySQLストレージエンジンの詳しい説明

1. MySQL で一般的に使用されるストレージ エンジンと機能

1. InnoDB ストレージ エンジン

MySQL バージョン 5.5 以降、MySQL のデフォルトの組み込みストレージ エンジンすでに InnoDB となっており、その主な機能は次のとおりです:

(1) 災害復旧が比較的優れている;
(2) トランザクションをサポートします。デフォルトのトランザクション分離レベルは反復性であり、MVCC (同時バージョン管理) を通じて実装されます。
(3) 使用されるロック粒度は行レベルのロックであり、より高い同時実行性をサポートできます;
(4) 外部キーをサポートします;
(5) いくつかのホット バックアップ ツールを使用してオンライン ホット バックアップをサポートします;
(6) InnoDB にはバッファ管理があり、クエリを高速化するためにバッファ プールを通じてすべてのインデックスとデータがキャッシュされます;
(7) InnoDB タイプのテーブルの場合、データの物理的な構成形式はクラスタリングです。クラスターテーブル。すべてのデータは主キーに従って編成されます。データとインデックスはまとめられ、番号 B のリーフ ノードに配置されます;

2. MyISAM ストレージ エンジン
バージョン 5.5 より前では、MyISAM が MySQL のデフォルトのストレージ エンジンでした。トランザクションをサポートしているため、使用シナリオは比較的少ない 主な特徴は、

(1) トランザクションをサポートしていない;
(2) 外部キーをサポートしていない です。外部キー、エラーは表示されず、外部キーのみが追加されます。キーには機能がありません。
(3) データのクエリ キャッシュはインデックスのみをキャッシュし、InnoDB のようなデータはキャッシュしません。オペレーティング システム自体のキャッシュ;
(4) デフォルトのロック粒度はテーブル レベルのロックであるため、同時実行性は非常に低く、ロックは高速で、ロックの競合が少ないため、デッドロックが発生する可能性が低くなります。サポートされています)ただし、MySQL のフルテキスト インデックスは基本的には使用されません。フルテキスト インデックスについては、ElasticSearch、Solr、Sphinx などの他の成熟したソリューションがあります。
(6) データベースが配置されているホストがダウンすると、MyISAM データ ファイルは簡単に破損し、回復が困難になります;

3. MEMORY ストレージ エンジン

はデータをメモリに保存し、Redis を使用します。 Memcached なども同様の考え方を持っており、データアクセスの高速化を図るため、主な機能としては、

(1) サポートされるデータ型が限定されており、例えば TEXT 型や BLOB 型などはサポートされていません。サポートされています。文字列型データの場合、固定のみがサポートされます。長さの行の場合、VARCHAR は自動的に CHAR 型として格納されます。

(2) サポートされるロック粒度はテーブル レベルのロックです。したがって、アクセス量が比較的多い場合、テーブル レベルのロックが MEMORY ストレージ エンジンのボトルネックになります;
(3) データはメモリに保存されるため、サーバーの再起動後にすべてのデータが失われます。
(4 ) クエリ時に一時テーブルが使用され、一時テーブルに BLOB 型および TEXT 型のフィールドがある場合、一時テーブルは MyISAM 型テーブルに変換され、パフォーマンスが大幅に低下します。
#4. ARCHIVE ストレージ エンジン

ARCHIVE ストレージ エンジンは、限られたシナリオに適しています。圧縮をサポートしているため、主にログ、ストリーミング、その他のデータのアーカイブに使用されます。主な機能:


( 1) Zlib 圧縮をサポートし、データはテーブルに挿入する前に最初に圧縮されます;

(2) SELECT および INSERT 操作のみをサポートします。保存されたデータはクエリのみが可能で、変更や削除はできません。

(3) 自動インクリメント キーのみをサポートします。インデックス、その他のインデックスはサポートされていません。

5. CSV ストレージ エンジン

データ転送トライアル、主な機能:


(1 ) データ形式は .csv 形式のテキストで、直接編集できます 保存;

(2) インポートとエクスポートが便利です。テーブル内のデータを直接 csv にエクスポートし、次のコマンドで開いてみることができます。 Excel オフィス ソフトウェア;


2. InnoDB と MyISAM の比較

1. ロック粒度の違いにより、InnoDB は MyISAM よりも高い同時実行性をサポートします;

2. InnoDB は行レベルを備えていますロックがあり、MyISAM にはテーブル レベルのロックがあるため、InnoDB は MyISAM よりもデッドロックになりやすいです。各行をロックする必要があるため、競合の可能性が高く、ロックのコストも高くなります。##3. 用語的には、バックアップとディザスター リカバリーの点で、InnoDB はオンライン ホット バックアップをサポートしており、非常に成熟したオンライン ホット バックアップ ソリューションを備えています;

4. クエリ パフォーマンスの点では、MyISAM のクエリ効率は InnoDB よりも高いです。クエリ プロセス中にデータ キャッシュを使用し、クエリ プロセスはまず行が配置されているデータ ブロックを検索し、次にデータ ブロック内で検索対象の行を配置します。MyISAM はデータが配置されているメモリ アドレスを直接配置できます。
5. SELECT COUNT(*) ステートメント、行数が数千万を超える場合、MyISAM はすぐにそれを見つけることができますが、MyISAM は行数を保存するため、InnoDB クエリが特に遅くなります。行を個別にカウントし、InnoDB では Zhu Xing が行数をカウントする必要があるため、InnoDB を使用していて行数をクエリする必要がある場合は、行数に対して次のような特別な処理を実行する必要があります: オフライン クエリとキャッシュ;
6. MyISAM のテーブル構造ファイルには、.frm (テーブル構造定義)、.MYI (インデックス)、.MYD (データ) が含まれますが、InnoDB のテーブル データ ファイルには、.ibd および .frm (テーブル構造定義) があります。

3. 適切なストレージ エンジンの選択方法
#1. 使用シナリオにトランザクション サポートが必要かどうか;

2. 高い同時実行性をサポートする必要があるかどうか、MyISAM の場合、InnoDB の同時実行性ははるかに高い;

3. 外部キーをサポートする必要があるかどうか;

4. オンライン ホット バックアップをサポートする必要があるかどうか;

5. データの効率的なバッファリング InnoDB はデータとインデックスの両方をバッファリングしますが、MyISAM はのみをバッファリングしますバッファ インデックス;
6. インデックス、異なるストレージ エンジンのインデックスは同じではありません;

MySQL 関連の技術記事の詳細については、MySQL チュートリアル 列にアクセスして学習してください。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。