 |

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