TOPサーバ構築・運用> MySQL+MyISAMエンジンのテーブルの特徴
徹底比較!! PostgreSQL vs MySQL
徹底比較!! PostgreSQL vs MySQL

第2回:データ構造の比較
著者:NTTデータ   藤塚 勤也   2006/4/18
前のページ  1  2  3  4
MySQL+MyISAMエンジンのテーブルの特徴

   MySQL+MyISAMエンジンのテーブルには、3種類のデータ構造があります。その中には、レコードデータのサイズが固定長のものと可変長のものがあり、MySQLが自動で選択します。固定長構造は、テーブルを構成するカラムのデータ型にVARCHAR、TEXT、BLOBを含んでいない場合に選択されます。

   固定長構造の最大の利点は、レコードの削除が行われた場合でも削除されたデータ領域を再利用することが容易なことです。よって固定長構造のテーブルファイルは、再利用できないデータ領域が残ってしまう「データのフラグメンテーション」が発生しない特徴を持っています。

    データのフラグメンテーションとは、利用できない無駄なデータ領域が虫食いのように残ってしまうことをいいます。また固定長構造のテーブルには、レコードデータに「row number」と呼ぶレコードを一意に識別する値が付けられ、MySQLはこの値を利用して高速に該当レコードを探し当てる仕組みを持っています。

   可変長構造は、テーブルを構成するカラムのデータ型にVARCHAR、TEXT、BLOBを含んでいる場合に選択されます。可変長構造のテーブルファイルは固定長構造と異なり、レコードを削除した場合のデータ領域の再利用が難しいため、データのフラグメンテーションが発生する可能性を持っています。

   データのフラグメンテーションが発生すると、ディスクの利用効率が低下するため、検索性能が劣化してしまいます。そのため、可変長構造のテーブルの場合は、一定周期にて、このデータのフラグメンテーションを取り除く処理を実施する必要があります。

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


MySQL+InnoDBエンジンのテーブルの特徴

   MySQL+InnoDBエンジンのテーブルはクラスタードインデックスと呼ばれる、特別なインデックスを備えた構造にてテーブルスペースの中に格納されます。クラスタードインデックスとは次に示すように、リーフと呼ぶインデックスの最下位レベルの部分がテーブルのレコードそのものになっている構成のインデックスです。

MySQL+InnoDBのクラスタードインデックス
図3:MySQL+InnoDBのクラスタードインデックス
(画像をクリックすると別ウィンドウに拡大図を表示します)

   よって、テーブル内のレコードはインデックス値の順に並んでいるといった特徴を持ちます。Oracleでは、この構成を索引構成表と呼び、通常のテーブルと区別して提供しています。

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

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

前のページ  1  2  3  4


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

INDEX
第2回:データ構造の比較
  はじめに
  MySQLのディレクトリ構造とファイル
  データ量が増えた場合の変化
MySQL+MyISAMエンジンのテーブルの特徴