All data in InnoDB is stored in database pages comprising a B-tree index (the so-called clustered index or primary key index). The essential idea is that the nodes of the B-tree contain, for each primary key value (whether user-specified or generated or chosen by the system), the values of the remaining columns of the row as well as the key. In some other database systems, a clustered index is called an “index-organized table”. Secondary indexes in InnoDB are also B-trees, containing pairs of values of the index key and the value of the primary key, which acts as a pointer to the row in the clustered index.
There is an exception to this rule. Variable-length columns
(such as BLOB
and VARCHAR
)
that are too long to fit on a B-tree page are stored on separately
allocated disk (“overflow”) pages. We call these
“off-page columns”. The values of such columns are
stored on singly-linked lists of overflow pages, and each such
column has its own list of one or more overflow pages. In some
cases, all or a prefix of the long column values is stored in the
B-tree, to avoid wasting storage and eliminating the need to read
a separate page.
The new “Barracuda” file format provides a new option
(KEY_BLOCK_SIZE
) to
control how much column data is stored in the clustered index, and
how much is placed on overflow pages.
This is the User’s Guide for InnoDB Plugin 1.0.6 for MySQL 5.1, generated on March 4, 2010 (rev 673:680M).