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