アーキテクチャ
アーキテクチャ概要図
参考:Storage Engine Architecture
SQLクエリ実行時の流れ
順番 | 名称 | 役割 |
---|---|---|
1 | Connectors | クライアントから接続、SQLクエリの発行 |
2 | Connection Pool | 接続の受け付け |
3 | SQL Interface | SQLクエリの受け付け |
4 | Parser | SQLクエリの構文解析 |
5 | Optimaizer | SQLクエリの実行計画の作成(どのIndexを使うか、JOINをどう行うかなど) |
6 | Pluggable Storage Engine | ストレージエンジンでメモリ、ファイルからデータ取得、更新 ストレージエンジンは複数あり変更が可能 |
7 | File System | OSファイルシステムでファイルから読み取り、保存 |
ストレージエンジン
MySQLの特徴の一つ
複数のストレージエンジンをテーブル毎に切り替えて使用することもできる。
MySQL5.5以降InnoDBがデフォルトのストレージエンジン
MySQL ストレージエンジンアーキテクチャーの概要
ストレージエンジンでやっていること
- テーブル定義と物理ファイルの関連付け
テーブル、インデックスをどのようなファイル構成、ファイルフォーマットで持つか - 独自のインデックス実装
ex)日本語全文検索 - 独自のキャッシュ機能
ex)innodb_buffer_pool_size(InnoDBのデータキャッシュ) - トランザクション機能
- 外部キー機能
など
InnoDBはトランザクション機能など他のDBと似た機能を持つ。
MyISAMではトランザクション機能がない。
BLACKHOLEでは実際にデータを書きこまない。
など、それぞれストレージエンジンの特徴があり、
アプリケーション要件に合わせテーブル毎に変更が可能。
MySQLインストール時に使用可能なストレージエンジンは以下
mysql> SHOW ENGINES;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
その他ストレージエンジン
MySQL公式以外にもストレージエンジンがリリースされている。
mroonga 日本語全文検索
Spider シャーディング
mroongaやSpiderはMariaDBにバンドルされてたりするので、
使いたい場合はMariaDBを使ってもよいのかも
MariaDB ストレージエンジン
※MariaDBはMySQLのfork?のDBでほぼMySQLと同じように使えます。
ストレージエンジンの設定
テーブル作成時に明示的に指定
CREATE TABLE test_table (id int) ENGINE = InnoDB;
ストレージエンジンの変更
ALTER TABLE test_table ENGINE = MyISAM;
ストレージエンジンの確認
SHOW CREATE TABLE test_table;
SHOW TABLE STATUS LIKE 'test_table';
SELECT TABLE_SCHEMA, TABLE_NAME, ENGINE
FROM information_schema.tables
WHERE TABLE_NAME = 'test_table';