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

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

   MyISAMテーブルには固定長構造可変長構造圧縮テーブルの3種類のデータ構造があります。前者の2つはレコードデータのサイズの取り扱い方法で、MySQLが自動で選択します。    なお、データ構造は「show table status」コマンドで確認できます。次の例では「TEST00」テーブルが固定長レコードの構造(Row_format: Fixed)でできていることがわかります。
mysql> show table status \G;
******** 1. row ***************************
           Name: TEST00
         Engine: MyISAM
        Version: 10
     Row_format: Fixed
           Rows: 0
 Avg_row_length: 0
    Data_length: 0
Max_data_length: 41658296553177087
   Index_length: 1024
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2006-07-12 15:09:18
    Update_time: 2006-07-12 15:09:18
     Check_time: NULL
      Collation: latin1_swedish_ci
       Checksum: NULL
 Create_options:
        Comment:


固定長構造

   固定長構造は、テーブルを構成するカラムのデータ型にVARCHAR、TEXT、BLOBを含んでいない場合に選択されます。固定長構造の最大の利点は、レコードの削除が行われた時に削除されたデータ領域の再利用が容易なことです。

   よって、固定長構造のテーブルファイルは再利用できないデータ領域が残ってしまう「データのフラグメンテーション」が発生しない特長を持っています。

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


可変長構造

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

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


圧縮テーブル

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


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

   テーブルを作成する際にInnoDBを選択すると、データベース名のサブディレクトリ内には、「テーブル名.frm」ファイルのみが作成されます。InnoDBのテーブルのレコードデータやインデックスデータは、テーブルスペースと呼ばれるファイル内に格納するためです。

   テーブルスペースとは、標準ではデータベースディレクトリ内に「ibdata1」という名称で作成されるファイルのことです。このテーブルスペースは、コンフィグレーションの変更により、その場所やサイズを指定することができます。なおテーブル構造のデータは、テーブル名.frmファイル内だけでなく、テーブルスペース内にも格納されます。

   次に示すは、「InnoDB_TEST」データベース内に「TEST00」という名前のInnoDBテーブルを作成した時のファイル一覧です。「InnoDB_TEST」ディレクトリ内に「TEST00.frm」ファイルのみが存在していることがわかると思います。

[root@localhost var]# ls InnoDB_TEST/
TEST00.frm

前のページ  1  2   3  次のページ


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

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