MyISAMとInnoDBについて

公開日: : MySQL

記事内に広告を含む場合があります。記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。

[ThinkIT] 第2回:MyISAMとInnoDB (1/3)を参考にしながら勉強する。

  1. MyISAM

    • MySQLのデフォルトストレージエンジン
    • ストレージエンジンを指定せずにテーブルを作成するとMyISAMが選択される

  2. InnoDB

    • 豊富なトランザクション機能を提供するストレージエンジン

ディレクトリ構造

以下のような感じ。

  • データベースディレクトリ/

    • バイナリログファイル
    • バイナリログファイル
    • バイナリログファイル
    • バイナリログファイル
    • mysql/
    • test/
    • ユーザデータベースを作成するディレクトリ/

この構造は、使用するストレージエンジンに関係なく共通。

MyISAMのテーブルファイル

データベース名のサブディレクトリ内に、以下のファイルが作成される。

テーブル名.frm
テーブル構造
テーブル名.MYD
レコードデータ
テーブル名.MYI
インデックスと統計情報

MyISAMテーブルの特長

以下の種類のデータ構造がある。

  1. 固定長構造
  2. 可変長構造
  3. 圧縮テーブル

データ構造は


show table status

で確認できる。

固定長構造

  • カラムのデータ型にVARCHAR、TEXT、BLOBを含んでいない場合に選択される
  • レコードの削除が行われた時に削除されたデータ領域の再利用が容易
  • 「データのフラグメンテーション」が発生しない
  • レコードデータに「row number」と呼ぶレコードを一意に識別する値が付けられる
  • 「row number」を利用して高速に該当レコードを探し当てることができる

可変長構造

  • テーブルを構成するカラムのデータ型にVARCHAR、TEXT、BLOBを含んでいる場合に選択される
  • レコードを削除した場合のデータ領域の再利用が難しいため、データのフラグメンテーションが発生する可能性がある
  • フラグメンテーションが発生するとディスクの利用効率が低下するため、検索性能が劣化する
  • 一定周期でこのデータのフラグメンテーションを取り除く処理を実施する必要がある

圧縮テーブル

  • 読み取り専用
  • 自動で選択されるものではなく、オプションユーティリティ(myisampack)を用いてユーザが作成する
  • 固定長構造/可変長構造ともに、圧縮テーブル構造に変更することが可能

InnoDBのディレクトリ構造とファイル

  • テーブルを作成する際にInnoDBを選択すると、データベース名のサブディレクトリ内には、「テーブル名.frm」ファイルのみが作成される
  • InnoDBのテーブルのレコードデータやインデックスデータは、テーブルスペースと呼ばれるファイル内に格納する
  • テーブルスペースとは、標準ではデータベースディレクトリ内に「ibdata1」という名称で作成されるファイルのこと
  • テーブル構造のデータは、テーブル名.frmファイル内だけでなく、テーブルスペース内にも格納される

InnoDBテーブルの特徴

  • InnoDBのテーブルは、クラスタードインデックスと呼ばれる特別なインデックスを備えた構造にて、テーブルスペースの中に格納される
  • リーフと呼ぶインデックスの最下位レベルの部分がテーブルのレコードそのものになっている構成のインデックス
  • テーブル内のレコードはインデックス値の順に並んでいる
  • Oracleでは、この構成を索引構成表と呼ぶ

トランザクション機能について

  • MyISAMエンジンはトランザクション機能を持っていませんが、MyISAMテーブルは更新できないわけではない
  • INSERT/UPDATE/DELETEすべて実行可能
  • トランザクション機能を持っていない分、非常に軽快に動作する
  • MyISAMのテーブルのロック単位はテーブル単位で、InnoDBのテーブルはレコード単位

InnoDBエンジンのトランザクション機能

  • Oracle相当の読み込み一貫性機能を持つ
  • ロック単位はレコード単位で、ロックのエスカレーションがない
  • トランザクションの分離レベルは4つ持つ

    • リードアンコミッティド
    • リードコミッティド
    • リピータブルリード
    • シリアライザブル

InnoDBエンジンのトランザクションログ

  • InnoDBは、トランザクションログのファイル群としてデータベースディレクトリ内の「ib_logfole0」ファイルと「ib_logfile1」ファイルを使用

  • Twitterもやってますので、フォローお願いします。@akio0911
  • Facebookもやってます。akio0911

関連記事

サンフランシスコのピア39にあるチャウダーズでクラムチャウダーを食す!

lolipop アップルの開発者向けイベント「WWDC2014」

ミスドのカルピスドーナツとカルピスポンデリングを食べてみた!

ミスドで期間限定のカルピスコラボ商品「カルピスドーナツ」と「カルピ

十三カレー計画で牛すじカレーネギのせを食す!(大阪・十三)

「iPhoneアプリ開発キャンプ@大阪」のランチで、十三カレー計画

大阪・難波の加寿屋 法善寺でかすうどんを食す。ランチタイムはおにぎり2個まで無料!

大阪・難波の加寿屋 法善寺 (かすうどん KASUYA)で、かす

ライブドアブログで運営していた「あきお商店」を「卵は世界である」に改名しました

少し前からライブドアブログで「あきお商店」というブログをやって

→もっと見る

PAGE TOP ↑