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