MyISAM
テーブルでは、静的フォーマットがデフォルトです。テーブルに可変長のカラムが含まれない場合に使用されます (VARCHAR
、VARBINARY
、BLOB
、または TEXT
)。各行は固定バイト数で格納されます。
3 つの MyISAM
ストレージフォーマットの中で、静的フォーマットが一番シンプルで安全です (一番破損しにくい)。またこれは、ディスク上でデータファイルの中の行が容易に検出できるという理由で、オンディスクフォーマットの中でもっとも高速です。インデックスの中の行数に基づいて行を検索するには、行数に行長を掛けて行の位置を計算します。また、テーブルをスキャンするときに、ディスクの読み込み操作ごとに一定の行数を読み込むことが容易です。
MySQL サーバーが固定フォーマットの MyISAM
ファイルに書き込んでいる最中にコンピュータがクラッシュした場合、その安全性が証明されます。この場合、myisamchk はそれぞれの行がどこで始まりどこで終わるかを簡単に判断できるため、通常、一部が書き込まれた行を除くすべての行を再利用できます。MyISAM
テーブルインデックスは、データ行に基づいていつでも再構築できます。
固定長の行フォーマットは、BLOB
または TEXT
カラムがないテーブルでのみ使用できます。明示的な ROW_FORMAT
句を持つカラムでテーブルを作成すると、エラーや警告は発生しません。フォーマットの仕様は無視されます。
静的フォーマットのテーブルには、次の特徴があります。
CHAR
およびVARCHAR
カラムには、特定のカラム幅にスペースが埋め込まれます (しかし、カラムの型は変わりません)。BINARY
およびVARBINARY
カラムには、カラム幅に0x00
バイトが埋め込まれます。非常に高速です。
キャッシュが容易です。
行が固定位置にあるため、クラッシュしたあとも再構築が容易です。
大量の行を削除して、空きディスク容量をオペレーティングシステムに戻す場合を除いて、再編成の必要はありません。これを行うには、
OPTIMIZE TABLE
または myisamchk -r を使用します。通常は、動的フォーマットテーブルよりも多くのディスク容量を必要とします。