With the exception of spatial indexes,
indexes are B-tree data
structures. Spatial indexes use
R-trees, which are
specialized data structures for indexing multi-dimensional data.
Index records are stored in the leaf pages of their B-tree or
R-tree data structure. The default size of an index page is
When new records are inserted into an
InnoDB tries to leave 1/16 of the page free
for future insertions and updates of the index records. If index
records are inserted in a sequential order (ascending or
descending), the resulting index pages are about 15/16 full. If
records are inserted in a random order, the pages are from 1/2
to 15/16 full.
As of MySQL 5.7.5,
InnoDB performs a bulk
load when creating or rebuilding B-tree indexes. This method of
index creation is known as a sorted index build.
innodb_fill_factor defines the
percentage of space on each B-tree page that is filled during a
sorted index build, with the remaining space reserved for future
index growth. Sorted index builds are not supported for spatial
indexes. For more information, see
Section 126.96.36.199, “Sorted Index Builds”.
If the fill factor of an
InnoDB index page
drops below the
MERGE_THRESHOLD, which is 50%
by default if not specified,
InnoDB tries to
contract the index tree to free the page. The
MERGE_THRESHOLD setting applies to both
B-tree and R-tree indexes. For more information, see
Section 14.12.10, “Configuring the Merge Threshold for Index Pages”.
You can configure the page
size for all
InnoDB tablespaces in a
MySQL instance by setting the
option before creating the instance. Once the page size for an
instance is set, you cannot change it. Supported sizes are 64KB,
32KB, 16KB (default), 8KB, and 4KB, corresponding to the option
Support for 32KB and 64KB pages sizes was added in MySQL 5.7.6.
For more information, refer to the
A MySQL instance using a particular
page size cannot use data files or log files from an instance
that uses a different page size.