MySQLのストレージエンジンについて【前編】

ストレージエンジンとは

MySQLの論理構造は以下から成ります。

  • 接続/スレッド処理
  • クエリキャッシュ
  • パーサー
  • ストレージエンジン
  • ストレージファイル

さらに図で表すと以下になります。

f:id:setomoki:20161129202711p:plain

 

この中のストレージエンジンでは実際のデータの読み書きを担当している部分になります。

このストレージエンジンには様々な種類があり、それぞれに特徴を持っています。

さらにはMySQLでは同一データベース内でテーブルごとに違うストレージエンジンの使用することが可能です。

ストレージエンジンが異なるテーブル同士をクエリで結合することも可能です。

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

  • InnoDBエンジン
  • MyISAMエンジン
  • Archiveエンジン
  • CSVエンジン
  • Federatedエンジン
  • Memoryエンジン
  • Mergeエンジン

これらについて以下で簡単に一つづつ説明していきます。

ただしInnoDBMyISAMに関しては特に代表的なものなので少しだけ詳しく説明したいと思いますので、後編でそれぞれを比較しながら説明したいと思います。

Archiveエンジン

  • INSERTクエリとSELECTクエリのみサポート
  • UPDATEクエリやDELETEクエリはサポート外
  • ORDER BY などもサポート外
  • データは圧縮されてディスクに保存される
  • 行レベルのロックと特殊なバッファシステムをサポートしている

以上のような特徴を持ったストレージエンジンになります。

このストレージエンジンを使う場合は以下の条件の時に検討したら良いと思います。

  • ユーザのアクセスでSELECTが発生しない
  • 頻繁にINSERTが発生する
  • 集計頻度が多くない

CSVエンジン

  • CSVファイルをテーブルとして扱うことができる
  • インデックスをサポートしていない
  • サーバの実行中にデータベースの間でファイルのコピーができる

以上のような特徴を持ったストレージエンジンになります。

基本的にこのエンジンはデータ交換フォーマットとして役に立つようである。

 

Federatedエンジン

  • 自身のMySQLサーバのデータベース内ではなくネットワークに接続された他のMySQLサーバ上にデータを格納する
  • 自身はテーブルデータの実態を持たない

 以上のような特徴を持ったストレージエンジンになります。

つまりは他のサーバへのプロキシの役割を持っている。

SELECT・INSERT・UPDATE・DELETEなどは対応しているがトランザクションなどは非対応である。

Memoryエンジン

  • メモリ上にテーブルを作成する
  • メモリ上に作成しているので再起動をするとデータが消える
  • 再起動してもテーブル構造は維持される
  • メモリ上なので高速

 以上のような特徴を持ったストレージエンジンになります。

メモリ上に作成するので高速なのですが再起動などをするとデータが消えます。

使い道としてはデータを分析するときに中間結果としてや定期的に集計されるデータの結果をキャッシュするためなどがあります。

Mergeエンジン

Mergeエンジンは複数の同一のMyISAMテーブルを1つの仮想テーブルとして組み合わせたものになります。同一のというのは全てのテーブルが同一のカラムとインデックス情報を持つという意味です。カラムのリストされている順番が違ったり、カラムが完全に一致していなかったり、インデックスの順番が違っていたりするといけません。

使い意味はいろいろ調べてみましたがよくわかりませんでした・・・

 

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

今回の内容はここまでになります。

後編ではInnoDBエンジンとMyISAMエンジンについて書いていきたいと思います。

 

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

この記事はほぼサーバなどを触ったことがない人物が学んだことを整理するために書いていますので間違いなどが多々あると思います。間違いなどありましたら是非コメントなどで教えていただけると幸いです。