15.2.3.1 静的 (固定長) テーブルの特長

MyISAM テーブルでは、静的フォーマットがデフォルトです。テーブルに可変長のカラムが含まれない場合に使用されます (VARCHARVARBINARYBLOB、または TEXT)。各行は固定バイト数で格納されます。

3 つの MyISAM ストレージフォーマットの中で、静的フォーマットが一番シンプルで安全です (一番破損しにくい)。またこれは、ディスク上でデータファイルの中の行が容易に検出できるという理由で、オンディスクフォーマットの中でもっとも高速です。インデックスの中の行数に基づいて行を検索するには、行数に行長を掛けて行の位置を計算します。また、テーブルをスキャンするときに、ディスクの読み込み操作ごとに一定の行数を読み込むことが容易です。

MySQL サーバーが固定フォーマットの MyISAM ファイルに書き込んでいる最中にコンピュータがクラッシュした場合、その安全性が証明されます。この場合、myisamchk はそれぞれの行がどこで始まりどこで終わるかを簡単に判断できるため、通常、一部が書き込まれた行を除くすべての行を再利用できます。MyISAM テーブルインデックスは、データ行に基づいていつでも再構築できます。

注記

固定長の行フォーマットは、BLOB または TEXT カラムがないテーブルでのみ使用できます。明示的な ROW_FORMAT 句を持つカラムでテーブルを作成すると、エラーや警告は発生しません。フォーマットの仕様は無視されます。

静的フォーマットのテーブルには、次の特徴があります。

  • CHAR および VARCHAR カラムには、特定のカラム幅にスペースが埋め込まれます (しかし、カラムの型は変わりません)。BINARY および VARBINARY カラムには、カラム幅に 0x00 バイトが埋め込まれます。

  • 非常に高速です。

  • キャッシュが容易です。

  • 行が固定位置にあるため、クラッシュしたあとも再構築が容易です。

  • 大量の行を削除して、空きディスク容量をオペレーティングシステムに戻す場合を除いて、再編成の必要はありません。これを行うには、OPTIMIZE TABLE または myisamchk -r を使用します。

  • 通常は、動的フォーマットテーブルよりも多くのディスク容量を必要とします。


User Comments
  Posted by Ganesh Prabhu on May 27, 2004
Storage space used by NULL columns:

If the table is Fixed-length the NULL coumns take up same space as they would have taken if they contained a value.

If there are lot of NULL columns and you want to save some space, then ALTER the table by adding a variable length column. That will make the table storage type as 'Dynamic' and the NULL coulmns will take up only one bit/byte.
Sign Up Login You must be logged in to post a comment.