ストレージエンジンは、異なるテーブルタイプの SQL 操作を処理する MySQL コンポーネントです。 InnoDB
はデフォルトで最も汎用的なストレージエンジンで、オラクルは特殊なユースケースを除いてテーブルにこれを使用することを推奨しています。 (MySQL 8.0 の CREATE TABLE
ステートメントはデフォルトで InnoDB
テーブルを作成します。)
MySQL Server はプラグ可能なストレージ エンジン アーキテクチャを使用しており、ストレージ エンジンを実行中の MySQL Server にロードしたりアンロードしたりすることが可能になっています。
サーバーがサポートするストレージ エンジンを決定するには、SHOW ENGINES
ステートメントを使用します。 Support
列の値は、エンジンが使用可能かどうかを示します。 YES
、NO
、または DEFAULT
の値は、エンジンが使用可能、使用不可、または使用可能で現在デフォルトのストレージ・エンジンとして設定されていることを表します。
mysql> SHOW ENGINES\G*************************** 1. row *************************** Engine: PERFORMANCE_SCHEMA Support: YES Comment: Performance SchemaTransactions: NO XA: NO Savepoints: NO*************************** 2. row *************************** Engine: InnoDB Support: DEFAULT Comment: Supports transactions, row-level locking, and foreign keysTransactions: YES XA: YES Savepoints: YES*************************** 3. row *************************** Engine: MRG_MYISAM Support: YES Comment: Collection of identical MyISAM tablesTransactions: NO XA: NO Savepoints: NO*************************** 4. row *************************** Engine: BLACKHOLE Support: YES Comment: /dev/null storage engine (anything you write to it disappears)Transactions: NO XA: NO Savepoints: NO*************************** 5. row *************************** Engine: MyISAM Support: YES Comment: MyISAM storage engineTransactions: NO XA: NO Savepoints: NO...
この章では、特別な目的の MySQL ストレージ エンジンのユースケースについて説明します。 デフォルトの InnoDB
ストレージエンジンや、「15章 InnoDB ストレージエンジン」および「23章 MySQL NDB Cluster 8.0」でカバーされている NDB
ストレージエンジンは対象外です。 上級ユーザ向けには、プラガブルストレージエンジンアーキテクチャの説明も含まれています(「MySQL ストレージエンジンアーキテクチャの概要」 を参照)。
商用 MySQL サーバ バイナリで提供される機能については、MySQL ウェブサイトの 「MySQL Editions」 を参照してください。 利用可能なストレージ エンジンは、使用している MySQL のエディションによって異なる場合があります。
MySQL ストレージ エンジンに関するよくある質問については、「MySQL 8.0 FAQ」 を参照してください。
MySQL 8.0 Supported Storage Engines
-
InnoDB
: MySQL 8.0 のデフォルトストレージエンジンです。InnoDB
は MySQL 用のトランザクションセーフ (ACID 準拠) ストレージエンジンで、コミット、ロールバック、クラッシュリカバリの機能を持ち、ユーザーデータを保護します。InnoDB
は行レベルのロック(粗い粒度のロックへのエスカレーションなし)と Oracle スタイルの一貫したノンロックリードにより、マルチユーザ同時実行性とパフォーマンスを向上させます。InnoDB
はユーザーデータをクラスタ化されたインデックスに格納し、主キーに基づく一般的なクエリでの I/O を削減します。 データの整合性を保つために、InnoDB
はFOREIGN KEY
参照整合性制約もサポートしています。InnoDB
の詳細については、第15章 InnoDB Storage Engine を参照してください。 -
MyISAM
: これらのテーブルはフットプリントが小さいです。 テーブルレベルのロックは、読み取り/書き込みワークロードでのパフォーマンスを制限するので、Webやデータウェアハウスの構成で読み取り専用または読み取り中心のワークロードでよく使用されます。 -
Memory
: すべてのデータを RAM に保存し、重要でないデータの迅速な検索を必要とする環境での高速アクセスを可能にする。 このエンジンは以前はHEAP
エンジンとして知られていました。 バッファプールメモリ領域を持つInnoDB
は、ほとんどあるいはすべてのデータをメモリ内に保持する汎用的で耐久性のある方法を提供し、NDBCLUSTER
は巨大な分散データセットに対して高速なキーバリュー検索を提供するもので、その使用例は減少している。 -
CSV
: テーブルはカンマ区切りのテキストファイルである。 CSV テーブルは、CSV 形式のデータをインポートまたはダンプして、同じ形式を読み書きするスクリプトやアプリケーションとデータを交換することができます。 CSVテーブルにはインデックスがないため、通常、通常の運用ではデータをInnoDB
テーブルに保存し、インポートまたはエクスポートの段階でのみCSVテーブルを使用します。 -
Archive
: このコンパクトでインデックスのないテーブルは、あまり参照されない大量の履歴、アーカイブ、またはセキュリティ監査情報を保存および検索することを目的としています。 -
Blackhole
: Blackholeストレージ・エンジンは、Unixの/dev/null
デバイスと同様に、データを受け取りますが、保存はしません。 クエリーは常に空のセットを返す。 これらのテーブルは、DMLステートメントがレプリカサーバーに送信されるが、ソースサーバーがデータの自身のコピーを保持しないレプリケーション構成で使用することができます。 -
NDB
(NDBCLUSTER
としても知られている)。 このクラスタ化されたデータベース・エンジンは、特に最高度のアップタイムと可用性を必要とするアプリケーションに適している。 -
Merge
: MySQL DBA または開発者は、一連の同一のMyISAM
テーブルを論理的にグループ化して、1 つのオブジェクトとして参照できるようにします。 データウェアハウスのような VLDB 環境に適しています。 -
Federated
: 多くの物理サーバーから 1 つの論理データベースを作成するために、別々の MySQL サーバーをリンクする機能を提供します。 分散環境またはデータマート環境に非常に適しています。 -
Example
: このエンジンは、新しいストレージエンジンを書き始める方法を説明する MySQL ソースコードの例として使用されます。 これは主に開発者が興味を持つものです。 このストレージエンジンは、何もしない「スタブ」です。 このエンジンでテーブルを作成することはできますが、その中にデータを格納したり、そこから取得したりすることはできません。
サーバまたはスキーマ全体で同じストレージ エンジンを使用するよう制限されているわけではありません。 任意のテーブルに対してストレージ エンジンを指定することができます。 たとえば、アプリケーションでは主に InnoDB
テーブルを使用し、1 つの CSV
テーブルはデータをスプレッドシートにエクスポートするため、いくつかの MEMORY
テーブルは一時的なワークスペースに使用するといったことが可能です。
ストレージ エンジンの選択
MySQL で提供されるさまざまなストレージ エンジンは、さまざまな使用ケースを想定して設計されています。 次の表は、MySQL で提供されるいくつかのストレージ エンジンの概要を提供し、表の後に明確な注記を記載しています。1 ストレージエンジン機能概要
機能 | MyISAM | メモリ | InnoDB | アーカイブ | NDB | ||||
---|---|---|---|---|---|---|---|---|---|
B-> | MyISAM | MyInnode | MyISAM | MyInnode | Yes | Yes | No | No | |
バックアップ/ポイント・イン・ポイント | Yes | Yes | No | Ye | Ye | はい | はい | はい | はい |
クラスタデータベース対応 | いいえ | いいえ | No | NOYes | |||||
Clustered indexes | No | Yes | No | No | |||||
圧縮データ | あり(注2) | No | YesYes | No | |||||
データキャッシュ | No | N/A | Yes | No | Yes | ||||
暗号化データ | Yes(note 3) | Yes(note 3)はい(注4) | はい(注3) | はい(注3) | |||||
外部キーサポート | いいえ | はい | いいえ | はい(注5) | |||||
フル-。テキスト検索インデックス | Yes | No | Yes(注6) | No | |||||
Geospatial データ型サポート | Yes | No | Yes | Yes | |||||
地理空間インデックス作成 サポート | Yes | No | Yes(注7) | No | |||||
Hash Indexes | No | Yes | No(注8) | Yes | |||||
インデックス・キャッシュ | Yes | N/A | Yes | No | Yes | ||||
Locking granularity | Table | Row | Row | Row | |||||
MVCC | No | Yes | No | レプリケーション対応(注1) | あり | 制限付き(注9) | あり | あり | |
ストレージ制限 | 256TB | RAM | 64TB | None | 384EB | ||||
T-を使用。ツリーインデックス | No | No | Yes | ||||||
トランザクション | No | Yes | No | Yes | |||||
Update statistics for data dictionary | Yes | Yes |
Notes.Netscape
1. ストレージ エンジンではなくサーバーに実装されています。
2. 圧縮された MyISAM テーブルは、圧縮行形式を使用する場合のみサポートされます。 MyISAM で圧縮行形式を使用するテーブルは読み取り専用です。
3. 暗号化関数によりサーバーに実装されます。
4. 暗号化関数によりサーバーに実装されます。MySQL 5.7 以降では、データアットレスト暗号化をサポートします。 外部キーのサポートは MySQL Cluster NDB 7.3 以降で利用可能。
6. FULLTEXT インデックスのサポートは MySQL 5.6 以降で利用可能。
7. 地理空間インデックスのサポートは MySQL 5.7 以降で利用可能。 このセクションの後の議論を参照してください。
9.