MyISAMーー>検索は早い、更新などは遅い
Innodbーー>その逆?
===>結構まえの説であり、Innodbもだいぶ進化して、定説はないみたい。。
・MyISAMのテーブルファイル
テーブル名.frmファイル
どのようなカラム構成にてできているかなどのテーブル構造のデータが格納されます。
テーブル名.MYDファイル
テーブルのレコードデータが格納されます。
テーブル名.MYIファイル:
そのテーブルに対して作成された複数のインデックスデータとテーブルの統計情報が格納されます。
★★★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)を用いてユーザが作成するものです。固定長構造/可変長構造ともに、圧縮テーブル構造に変更することが可能です。