TOP
>
サーバ構築・運用
> MySQL+MyISAMエンジンのテーブルの特徴
徹底比較!! 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エンジンのテーブルは
クラスタードインデックス
と呼ばれる、特別なインデックスを備えた構造にてテーブルスペースの中に格納されます。クラスタードインデックスとは次に示すように、リーフと呼ぶインデックスの最下位レベルの部分がテーブルのレコードそのものになっている構成のインデックスです。
図3:MySQL+InnoDBのクラスタードインデックス
(画像をクリックすると別ウィンドウに拡大図を表示します)
よって、テーブル内のレコードはインデックス値の順に並んでいるといった特徴を持ちます。Oracleでは、この構成を索引構成表と呼び、通常のテーブルと区別して提供しています。
InnoDBエンジンのクラスタードインデックスの値は、プライマリーキーが使用されるため、プライマリーキーの値順にレコードが並んだ構成のテーブルとなります。プライマリーキーが定義されていないテーブルの場合は、InnoDBが自動的に6ByteのローIDと呼ぶフィールドをレコードに追加し、このローIDを用いてクラスタードインデックスを構成します。
クラスタードインデックスは、構造上1テーブルに1つしか作成できません。そこで、セカンダリーインデックスとして、非クラスタードインデックスが作成できます。非クラスタードインデックスのリーフ部分には、プライマリーキー値もしくは、ローIDが使用され、最終的にはクラスタードインデックスを通して、対象のレコードが選択されます。
前のページ
1
2
3
4
著者プロフィール
株式会社NTTデータ 藤塚 勤也
基盤システム事業本部 オープンソース開発センタ シニアスペシャリスト。
日本タンデムコンピューターズ(現日本HP)を経て、2003年よりNTTデータにてOSS分野に参画。日頃はオリジナルOSSの開発や、OSSを用いたシステム構築への技術支援に従事。「RDBMS解剖学」(翔泳社)を共著。
INDEX
第2回:データ構造の比較
はじめに
MySQLのディレクトリ構造とファイル
データ量が増えた場合の変化
MySQL+MyISAMエンジンのテーブルの特徴