MySQL とは
世界でもっとも利用されている データベース管理システム(DBMS : DataBase Manegement System)
- オープンソースソフトウェア(OSS : Open Source Software) のため基本的に無料
- 拡張性と柔軟性が高い
- 小さなアプリケーションから巨大なアプリケーションまですべてに対応可能
- Mac, Windows, Linuxなど複数のOSで利用可能
- ストレージエンジン をテーブルごとに選択できる
MySQL 実行の流れ
クライアントからSQL文が投げられた場合、MySQLではおおまかに以下のような流れで処理されます。
オプティマイザ とは
- SQL文を最適化してくれる、MySQLの 脳 のようなもの
- 各テーブルのレコード数、列数と列のサイズやインデックス情報などの 統計情報 を元にどのようにテーブルにアクセスするか(フルスキャンするのか、インデックスをつかうのか、など)がかかれた 実行計画 を作成する
※ 実際のDBの情報 = 統計情報 ではないため、DBの情報が更新されたら統計情報も更新が必要
(更新しないと古い情報をもとに実行計画がつくられてしまい、SQLのパフォーマンスが落ちる)
ストレージエンジン とは
- 実際にデータベースにデータの読み書きを行っている
- 様々な種類があり、テーブルごとに選択できる
- デフォルトでは MySQL5.6までは MyISAM, MySQL5.7以降は InnoDB が選択されている(デフォルトストレージエンジン を設定することもできる)
- テーブルを作成するときに選択する
CREATE TABLE sample_table(id int) ENGINE = InnoDB;
MyIsam と InnoDB
MyIsam 特徴
- メリット
- 参照系処理が高速
- デメリット
- トランザクションが使えないので、リカバリが面倒
- テーブルロックをかけるので、複数のクライアントからの同時更新でロックが発生する
InnoDB 特徴
- メリット
- トランザクションが使えるので、リカバリが楽。
- 行ロックを行うので更新/参照の競合が限定的になる。
- デメリット
- 参照処理がMyISAMに比べて遅い。
- データサイズがMyISAMに比べて大きくなるのでその分ディスク容量が必要。
MyISAM や InnoDB のほかにも以下のような種類がある
ストレージエンジン | 特徴 |
---|---|
MyISAM | データファイルとインデックスファイルの2ファイルで保存される。トランザクション、行レベルのロックをサポートしていない。 |
InnoDB | トランザクション、行レベルに対応したエンジン。MyISAMよりは速度が劣る。 |
Memory | メモリにデータを格納するエンジン。再起動などで、データが失われる。 |
Merge | 複数のMyISAMを統合したエンジン。 |
Federated | ローカルにデータを保存せず、リモートを参照するエンジン。 |
おまけ
MySQLの処理を料理にたとえてみました!
参考
・実行計画??統計情報??って人へ
・MySQLの「InnoDB」と「MyISAM」についての易しめな違い
わたくしごと
DBA目指して勉強中...
- MySQL について ◀ これ
- MySQL のインストール
- my.cnf について