目次
ストレージエンジンは、さまざまなテーブル型に対する SQL 操作を処理する MySQL コンポーネントです。 InnoDB
はデフォルトでもっとも汎用のストレージエンジンであり、Oracle は、特別なユースケースを除くテーブルについては、このエンジンの使用を推奨します。 (デフォルトでは、MySQL 8.0 の CREATE TABLE
ステートメントは InnoDB
テーブルを作成します。)
MySQL Server は、ストレージエンジンが、動作中の MySQL サーバーにロードされたり、MySQL サーバーからアンロードされたりできる、プラガブルストレージエンジンアーキテクチャーを採用しています。
ご使用のサーバーがサポートするストレージエンジンを調べるには、SHOW ENGINES
ステートメントを使用します。 サポート
カラムの値は、エンジンを使用できるかどうかを示します。 YES
、NO
、または DEFAULT
の値は、エンジンが「使用可能」、「使用可能でない」、または「デフォルトのストレージエンジンとして使用可能であり、現在設定されている」を表しています。
mysql> SHOW ENGINES\G
*************************** 1. row ***************************
Engine: PERFORMANCE_SCHEMA
Support: YES
Comment: Performance Schema
Transactions: NO
XA: NO
Savepoints: NO
*************************** 2. row ***************************
Engine: InnoDB
Support: DEFAULT
Comment: Supports transactions, row-level locking, and foreign keys
Transactions: YES
XA: YES
Savepoints: YES
*************************** 3. row ***************************
Engine: MRG_MYISAM
Support: YES
Comment: Collection of identical MyISAM tables
Transactions: 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 engine
Transactions: NO
XA: NO
Savepoints: NO
...
この章では、特別な目的の MySQL ストレージエンジンのユースケースについて説明します。 第15章「InnoDB ストレージエンジン」および 第23章「MySQL NDB Cluster 8.0」で説明するデフォルトの InnoDB
ストレージエンジンまたは NDB
ストレージエンジンについては説明しません。 上級ユーザーの場合は、プラガブルストレージエンジンアーキテクチャの説明も含まれています (セクション16.11「MySQL ストレージエンジンアーキテクチャーの概要」 を参照)。
商用 MySQL Server バイナリで提供される機能の詳細は、MySQL web サイトの「MySQL エディション」を参照してください。 使用可能なストレージエンジンは、使用している MySQL のエディションによって異なります。
MySQL ストレージエンジンに関するよくある質問の回答については、セクションA.2「MySQL 8.0 FAQ: ストレージエンジン」を参照してください。
MySQL 8.0 がサポートするストレージエンジン
InnoDB
: MySQL 8.0 のデフォルトのストレージエンジン。InnoDB
はトランザクションセーフな (ACID に準拠した) MySQL 用のストレージエンジンであり、ユーザーデータを保護するためのコミット、ロールバック、およびクラッシュリカバリ機能を備えています。InnoDB
の行レベルロック (より粒度の粗いロックへのエスカレーションは行わない) と Oracle スタイルの一貫性非ロック読み取りにより、マルチユーザーの並列性とパフォーマンスが向上します。InnoDB
では、主キーに基づいた一般的なクエリーの入出力を低減するため、クラスタ化されたインデックス内にユーザーデータが格納されます。InnoDB
ではデータの整合性を維持できるように、FOREIGN KEY
参照整合性制約もサポートされています。InnoDB
の詳細については、第15章「InnoDB ストレージエンジン」を参照してください。MyISAM
: これらのテーブルのフットプリントは小さくなります。 テーブルレベルのロック では、読み取り/書き込みの作業負荷でのパフォーマンスが抑えられるため、Web およびデータウェアハウス構成の読み取り専用または読み取りが大半の作業負荷の場合に使用されるのが一般的です。メモリー
: すべてのデータを RAM に格納します (重要でないデータの短時間での検索が必要な環境で高速にアクセスするため)。 このエンジンは以前はHEAP
エンジンとして知られていました。 このユースケースは減少しています。バッファープールのメモリー領域を持つInnoDB
は、ほとんどのデータまたはすべてのデータをメモリーに保持する汎用的で永続的な方法を提供し、NDBCLUSTER
は大規模な分散データセットでキー値の高速な検索ができます。CSV
: このテーブルは、カンマ区切り値を持つ実際のテキストファイルです。 CSV テーブルにより、CSV フォーマットでデータをインポートしたりダンプしたりして、同じフォーマットを読み込んだり書き込んだりするスクリプトおよびアプリケーションとデータを交換できます。 CSV テーブルはインデックス化されないため、通常の操作時はデータをInnoDB
テーブルに保持し、インポートまたはエクスポートの段階でのみ CSV テーブルを使用するのが一般的です。アーカイブ
: これらのインデックス化されていないコンパクトなテーブルは、ほとんど参照されない大量の履歴情報、アーカイブされた情報、またはセキュリティー監査情報を格納したり、検索したりするためのテーブルです。Blackhole
: Blackhole ストレージエンジンはデータを受け付けますが、Unix/dev/null
デバイスと同じように、格納しません。 クエリーは常に空のセットを返します。 これらのテーブルは、DML ステートメントがレプリカサーバーに送信されるレプリケーション構成で使用できますが、ソースサーバーはデータの独自のコピーを保持しません。NDB
(NDBCLUSTER
とも呼ばれる): このクラスタデータベースエンジンは、可能なかぎり高いアップタイムと可用性を必要とするアプリケーションに特に適しています。マージ
: MySQL DBA または開発者は、一連のまったく同じMyISAM
テーブルを論理的にグループ分けして、それらを 1 つのオブジェクトとして参照します。 データウェアハウスなどの VLDB 環境に適しています。Federated
: 多くの物理サーバーから 1 つの論理サーバーを作成するために別々の MySQL サーバーをリンクする機能を提供します。 分散またはデータマート環境に非常に適しています。例
: このエンジンは、新しいストレージエンジンの書き込みを開始する方法を示す MySQL ソースコードの例として機能します。 これは、主に開発者が対象です。 ストレージエンジンは何もしない 「stub」 です。 このエンジンでテーブルを作成できますが、それらにデータを格納したり、それらからデータを取り出したりすることはできません。
サーバー全体またはスキーマ全体に同じストレージエンジンを使用するという制限はありません。 いずれのテーブルにもストレージエンジンを指定できます。 たとえばアプリケーションでは、InnoDB
テーブルを使用している場合がほとんどであり、データをスプレッドシートにエクスポートするための CSV
テーブルを 1 つ、テンポラリワークスペース用に MEMORY
テーブルをいくつか持っています。
ストレージエンジンの選択
MySQL が提供するさまざまなストレージエンジンは、異なるユースケースで使用されることを想定して設計されています。 次のテーブルに、MySQL で提供される一部のストレージエンジンの概要と、そのあとのノートを示します。
表 16.1 「ストレージエンジン機能のサマリー」
機能 | MyISAM | メモリー | InnoDB | アーカイブ | NDB |
---|---|---|---|---|---|
B ツリーインデックス | はい | はい | はい | いいえ | いいえ |
MVCC | いいえ | いいえ | はい | いいえ | いいえ |
T ツリーインデックス | いいえ | いいえ | いいえ | いいえ | はい |
インデックスキャッシュ | はい | N/A | はい | いいえ | はい |
クラスタデータベースのサポート | いいえ | いいえ | いいえ | いいえ | はい |
クラスタ化されたインデックス | いいえ | いいえ | はい | いいえ | いいえ |
ストレージの制限 | 256TB | RAM | 64TB | なし | 384EB |
データキャッシュ | いいえ | N/A | はい | いいえ | はい |
データディクショナリ向け更新統計 | はい | はい | はい | はい | はい |
トランザクション | いいえ | いいえ | はい | いいえ | はい |
ハッシュインデックス | いいえ | はい | いいえ (note 1) | いいえ | はい |
バックアップ/ポイントインタイムリカバリ (note 2) | はい | はい | はい | はい | はい |
レプリケーションのサポート (note 2) | はい | 制限付き (note 3) | はい | はい | はい |
ロック粒度 | Table | Table | 行 | 行 | 行 |
全文検索インデックス | はい | いいえ | はい (note 4) | いいえ | いいえ |
圧縮データ | はい (note 5) | いいえ | はい | はい | いいえ |
地理空間インデックスのサポート | はい | いいえ | はい (note 6) | いいえ | いいえ |
地理空間データ型のサポート | はい | いいえ | はい | はい | はい |
外部キーのサポート | いいえ | いいえ | はい | いいえ | はい (note 7) |
暗号化データ | はい (note 8) | はい (note 8) | はい (note 9) | はい (note 8) | はい (note 8) |
Notes:
1. InnoDB は、アダプティブハッシュインデックス機能に対して、内部的にハッシュインデックスを利用します。
2. ストレージエンジン内ではなくサーバー内で実装されています。
3. このセクションの後半の説明を参照してください。
4. FULLTEXT インデックスに対する InnoDB サポートは、MySQL 5.6 以降で使用できます。
5. 圧縮された MyISAM テーブルがサポートされているのは、圧縮行フォーマットを使用している場合だけです。 MyISAM で圧縮行フォーマットを使用するテーブルは、読み取り専用です。
6. InnoDB での地理空間インデックス付けのサポートは、MySQL 5.7 以降で使用できます。
7. 外部キーのサポートは、MySQL Cluster NDB 7.3 以降で使用できます。
8. 暗号化機能を介してサーバーに実装されます。
9. 暗号化機能を介してサーバーに実装されます。MySQL 5.7 以降では、保存データのテーブルスペース暗号化がサポートされます。