TOPサーバ構築・運用> InnoDBテーブルの特徴




徹底比較!! MySQLエンジン
徹底比較!! MySQLエンジン

第2回:MyISAMとInnoDB
著者:NTTデータ  藤塚 勤也   2006/8/14
前のページ  1  2  3
InnoDBテーブルの特徴

   InnoDBのテーブルは、クラスタードインデックスと呼ばれる特別なインデックスを備えた構造にて、テーブルスペースの中に格納されます。クラスタードインデックスとは、図2に示すように、リーフと呼ぶインデックスの最下位レベルの部分がテーブルのレコードそのものになっている構成のインデックスです。よって、テーブル内のレコードはインデックス値の順に並んでいるといった特長を持ちます。Oracleでは、この構成を索引構成表と呼び、通常のテーブルと区別して提供しています。
クラスタードインデックス
図2:クラスタードインデックス

   InnoDBのクラスタードインデックスの値としては、プライマリキーが使用されるため、プライマリキーの値順にレコードが並んだ構成のテーブルとなります。プライマリキーが定義されていないテーブルの場合は、InnoDBが自動的に6バイトのローIDと呼ぶフィールドをレコードに追加し、このローIDを用いてクラスタードインデックスを構成します。

   クラスタードインデックスは、構造上1テーブルに1つしか作成できません。そこで、セカンダリーインデックスとして、非クラスタードインデックスが作成できます。非クラスタードインデックスのリーフ部分には、プライマリキー値もしくは、ローIDが使用され、最終的にはクラスタードインデックスを通して、対象のレコードが選択されます。


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

   MyISAMエンジンはトランザクション機能を持っていませんが、MyISAMテーブルは更新できないわけではありません。INSERT/UPDATE/DELETEすべて実行可能です。トランザクション機能を持っていない分、非常に軽快に動作することで有名です。

   またMyISAMのテーブルのロック単位はテーブル単位で、InnoDBのテーブルはレコード単位です。


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

   InnoDBのトランザクション機能の特長は以下の通りです。

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

表2:InnoDBのトランザクション機能の特長

   InnoDBの読み込み一貫性機能の仕組みは、変更前データをロールバックセグメントに格納することによって実現しています。このロールバックセグメントは、テーブルスペース内に用意されます。機能だけでなく、実現方法もOracleに似ています。

   ロックのエスカレーションが発生しない理由は、非常に少ないリソースにて個々のロックを実現しているためです。

   ここで紹介した特長はほんの一部ですが、InnoDBのトランザクション機能は商用のRDBMSに匹敵する機能を有しています。


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

   InnoDBは、トランザクションログのファイル群としてデータベースディレクトリ内の「ib_logfole0」ファイルと「ib_logfile1」ファイルを使用します。このファイル群のファイル数はユーザ自身で設定可能で、デフォルトで2つです。

   各ログファイルのサイズは5Mバイトで、これも設定可能です。InnoDBは「ib_logfole0」ファイルと「ib_logfile1」ファイルを循環的に使用してREDOログと呼ぶ変更後データのログを記録します。


まとめ

   今回は、MySQLを使用する際に非常によく使われるストレージエンジンのMyISAMとInnoDBを取り上げました。MyISAM/InnoDB共に、RDBMSとしては標準的な機能を有するストレージエンジンです。

   次回以降は、多少変わった特長を持つストレージエンジンが登場しますので、ご期待ください。

前のページ  1  2  3


株式会社NTTデータ  藤塚 勤也
著者プロフィール
株式会社NTTデータ   藤塚 勤也
基盤システム事業本部 オープンソース開発センタ シニアスペシャリスト。
日本タンデムコンピューターズ(現日本HP)を経て、2003年よりNTTデータにてOSS分野に参画。日頃はオリジナルOSSの開発や、OSSを用いたシステム構築への技術支援に従事。「RDBMS解剖学」(翔泳社)を共著。

INDEX
第2回:MyISAMとInnoDB
  はじめに
  MyISAMテーブルの特長
InnoDBテーブルの特徴