LoginSignup
47

More than 3 years have passed since last update.

MySQLのストレージエンジンについて

Last updated at Posted at 2021-02-07

MySQLのストレージエンジンについて

ストレージエンジンとは?

  • SQL文を受け取って結果を返すデータベースエンジン部分 ⇨ つまりテーブルにデータを書き込んだり読みだしたりするプログラム
  • 複数の種類があり、データの取得方法、保存方法、処理方法がストレージエンジンによって異なる
  • MySQLの場合、テーブル毎にストレージエンジンを分けられる img

上図ではMySQLサーバ内の構造を中心に図示しており、複数のストレージエンジンがプラグのマーク付きで示されています。そして、複数のストレージエンジンの配下にユーザデータファイルやログファイルを持つファイルシステムが記されていることがわかると思います。 このようにストレージエンジン部分がモジュール化されたアーキテクチャは、アプリケーションの特性の違いによって適したストレージエンジンを使用できるといったメリットを生みます。

またアプリケーション開発者は、図1の上部にあるConnector APIを通してMySQLにアクセスするため、ストレージエンジンの違いを意識する必要はありません。

ストレージエンジンの種類

ストレージエンジン 概要
MyISAM MySQL標準のストレージエンジンとして使用される(旧標準)
InnoDB 行ロックとトランザクションをサポートする(現在の標準)
Memory メモリ上にテーブルを配置する
Merge 複数のMyISAMテーブルを統合する
Archive 圧縮したデータベースを使用する
Federated リモートのデータベースを参照する
NDB クラスター構成にて使用される
CSV データファイルにCSVを使用する
Blackhole ダミーテーブルを使用する
対応エンジン確認方法
SHOW ENGINES;
ストレージエンジン確認方法
SHOW TABLE STAUS WHERE NAME = [テーブル名] \G;

代表的なストレージエンジン

  • MyIsam
  • InnoDB
MyIsamエンジン
  • 旧デフォルトストレージエンジンでバランスが良かったらしい
  • トランザクション非対応
  • レコードレベルのロックをサポートしない ⇨ 故にロックの粒度がテーブル単位になる
  • クラッシュセーフでない ⇨ なんらかの事情によりプロセスがダウンしたり、マシンが電源毎落ちた場合、再起動後に元の状態に戻って処理を再開できない
  • クラッシュしやすく、Innodbよりも復旧にかかる時間が長い
  • リードは早いので参照が多いテーブル構成だとInnoDBよりパフォーマンスが高い
InnoDBエンジン
  • 現在のデフォルト
  • トランザクション対応
  • クラッシュセーフである
  • ロックの粒度がレコード単位 ⇨ ロック方法を指定できる(参考記事

テーブル毎にストレージエンジンを変更できるが、それが必ずしも良いわけではなく、バックアップとサーバーの調整が難しくなるため十分な検討が必要

テーブル移行

参考記事

https://qiita.com/arutemyan/items/b75d240f2f5b7da98a4a
https://qiita.com/SuguruOoki/items/fbaed055611b9416e4cc
https://qiita.com/at_1016/items/33186523cfc20fb58675
https://www.dbonline.jp/mysql/myini/index4.html

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
47