last modified July 10, 2020
この章では、MySQLストレージエンジンについて説明します。
ストレージエンジンは、データベース管理システムがデータベースからのデータの作成、読み取り、更新に使用するソフトウェアモジュールです。 MySQL には、トランザクションと非トランザクションの 2 種類のストレージ エンジンがあります。
MySQL 5.5 以降では、デフォルト ストレージ エンジンは InnoDB です。 正しいストレージ エンジンを選択することは、将来の開発に影響を与える重要な戦略的決定です。 このチュートリアルでは、MyISAM、InnoDB、Memory、およびCSVのストレージエンジンを使用します。 MySQL が初めてで、MySQL データベース管理システムを勉強しているのであれば、これはあまり気にすることではありません。 実稼働データベースを計画している場合は、より複雑になります。
List of storage engines
MySQL がサポートするストレージ エンジン。
- InnoDB
- MyISAM
- Memory
- CSV
- Merge
- Archive
- Federated
- Blackhole
- 例
InnoDB は最も広く使われているストレージ エンジンで、トランザクションもサポートされています。 これは、ACID 準拠のストレージ エンジンです。 列レベルのロック、クラッシュ リカバリ、および複数バージョンの同時実行制御をサポートします。 また、外部キー参照整合性制約を提供する唯一のエンジンです。 オラクルは、特殊なユースケースを除いて、テーブルに InnoDB を使用することを推奨しています。 トランザクションをサポートしない。 MyISAM はテーブル・レベロッキングを提供します。
メモリ・ストレージ・エンジンは、メモリ上にテーブルを作成するもので、主にWebやデータウェアハウスで使用される。 最も高速なエンジンである。 テーブル・レベル・ロックを提供します。 メモリ・ストレージ・エンジンは、一時テーブルやクイックルックアップの作成に最適です。 この形式のデータは他のアプリケーションに簡単に統合できるため、大きな柔軟性を提供します。 マージテーブルは、大量のデータをより簡単に管理するのに役立ちます。 これは、一連の同一のMyISAMテーブルを論理的にグループ化し、それらを1つのオブジェクトとして参照します。
アーカイブストレージエンジンは、高速な挿入のために最適化されています。 挿入されたデータは圧縮されます。 トランザクションはサポートしていません。 めったに参照されない大量の履歴データ、アーカイブデータの保存と検索に最適です。
ブラックホール・ストレージ・エンジンは、データを受け入れるが保存はしない。 検索は常に空集合を返す。 この機能は、データが自動的に複製されるがローカルには保存されない分散データベース設計で使用することができる。 このストレージ エンジンは、パフォーマンス テストやその他のテストの実行に使用できます。
Federated Storage Engine は、MySQL サーバーを分離し、多くの物理サーバーから 1 つの論理データベースを作成する機能を提供します。
mysql> SHOW ENGINES\G*************************** 1. row *************************** Engine: InnoDB Support: DEFAULT Comment: Supports transactions, row-level locking, and foreign keysTransactions: YES XA: YES Savepoints: YES*************************** 2. row *************************** Engine: CSV Support: YES Comment: CSV storage engineTransactions: NO XA: NO Savepoints: NO...
SHOW ENGINES
コマンドは、サーバーがサポートするすべての利用可能なエンジンを表示します。
正しいエンジンを選択する
すべての状況に最適なストレージ エンジンは存在しません。 特定の条件下で最高のパフォーマンスを発揮するものもあれば、他の条件下ではパフォーマンスが低下するものもあります。 考慮しなければならないトレードオフがあります。 より安全なソリューションは、より多くのリソースを取ります。それはより遅く、より多くの CPU 時間およびディスク領域を取るかもしれません。 MySQLは、いくつかの異なるストレージエンジンを提供するという事実において、非常に柔軟です。 アーカイブエンジンのように、特定の状況下で使用するために作成されたものもあります。
いくつかのケースでは、答えは明らかです。 ある種の決済システムを扱っているときはいつでも、最も安全なソリューションを使用することが義務付けられています。 そのような機密データを失うことは許されません。 InnoDB は行くべき道です。 もしフルテキストサーチが必要なら、MyISAMかInnoDBのどちらかを選べばいい。 InnoDBだけが外部キー参照整合性制約をサポートしており、もしこの制約を使う予定があるなら、選択は明らかだ。
ストレージ・エンジンの指定と変更
ストレージ・エンジンはテーブル作成時に指定します。
mysql> CREATE TABLE Cars(Id INTEGER PRIMARY KEY, Name VARCHAR(50), -> Cost INTEGER) ENGINE='MyISAM';
ENGINE
キーワードは、この特定のテーブルに使用されるストレージ・エンジンを指定します。
明示的にストレージ エンジンを指定しない場合、デフォルトのストレージ エンジンが使用されます。 MySQL 5.5 以前のデフォルトのストレージエンジンは MyISAM でした。 MySQL 5.5 およびそれ以降では、デフォルトのストレージ エンジンは InnoDB です。
別のストレージ エンジンに移行することは可能です。 大きなテーブルの移行には長い時間がかかる可能性があることに注意してください。 また、テーブルを移行する際にいくつかの問題に遭遇する可能性があります。 一部の機能は、両方のテーブルでサポートされていない可能性があります。
mysql> SELECT ENGINE FROM information_schema.TABLES -> WHERE TABLE_SCHEMA='mydb' -> AND TABLE_NAME='Cars';+--------+| ENGINE |+--------+| InnoDB |+--------+1 row in set (0,05 sec)
この SQL 文は、mydb
データベース内の Cars
テーブルに使用されているストレージ エンジンを検出します。 SELECT CREATE TABLE Cars
SQLステートメントも使用できます。 information_schema
は、テーブルに関する技術情報を格納するテーブルです。
mysql> ALTER TABLE Cars ENGINE='MyISAM';
この SQL 文は、Cars
テーブルのストレージ エンジンを MyISAM に変更します。
mysql> SELECT ENGINE FROM information_schema.TABLES -> WHERE TABLE_SCHEMA='mydb' -> AND TABLE_NAME='Cars';+--------+| ENGINE |+--------+| MyISAM |+--------+1 row in set (0,00 sec)
これで、テーブルのストレージ エンジンはMyISAMになりました。
MySQL チュートリアルのこのパートでは、ストレージ エンジンを取り上げました。