MySQL 8.0 Reference Manual Including MySQL NDB Cluster 8.0
Static format is the default for MyISAM
tables. It is used when the table contains no variable-length
columns (VARCHAR,
VARBINARY,
BLOB, or
TEXT). Each row is stored using a
fixed number of bytes.
Of the three MyISAM storage formats, static
format is the simplest and most secure (least subject to
corruption). It is also the fastest of the on-disk formats due
to the ease with which rows in the data file can be found on
disk: To look up a row based on a row number in the index,
multiply the row number by the row length to calculate the row
position. Also, when scanning a table, it is very easy to read a
constant number of rows with each disk read operation.
The security is evidenced if your computer crashes while the
MySQL server is writing to a fixed-format
MyISAM file. In this case,
myisamchk can easily determine where each row
starts and ends, so it can usually reclaim all rows except the
partially written one. MyISAM table indexes
can always be reconstructed based on the data rows.
Fixed-length row format is available only for tables having no
BLOB or
TEXT columns. Creating a table
having such columns with an explicit
ROW_FORMAT clause does not raise an error
or warning; the format specification is ignored.
Static-format tables have these characteristics:
CHAR and
VARCHAR columns are
space-padded to the specified column width, although the
column type is not altered.
BINARY and
VARBINARY columns are padded
with 0x00 bytes to the column width.
NULL columns require additional space in
the row to record whether their values are
NULL. Each NULL column
takes one bit extra, rounded up to the nearest byte.
Very quick.
Easy to cache.
Easy to reconstruct after a crash, because rows are located in fixed positions.
Reorganization is unnecessary unless you delete a huge
number of rows and want to return free disk space to the
operating system. To do this, use
OPTIMIZE TABLE or
myisamchk -r.
Usually require more disk space than dynamic-format tables.
The expected row length in bytes for static-sized rows is calculated using the following expression:
row length = 1
+ (sum of column lengths)
+ (number of NULL columns + delete_flag + 7)/8
+ (number of variable-length columns)
delete_flag is 1 for tables with
static row format. Static tables use a bit in the row record
for a flag that indicates whether the row has been deleted.
delete_flag is 0 for dynamic
tables because the flag is stored in the dynamic row header.