MySQL 聚集索引
本文讲述 MySQL 中的聚集索引以及如何在 InnoDB 表中管理聚集索引。
聚集索引是一种特殊的索引,此索引中的键值的顺序决定了表中相应行的物理顺序。作为类比,聚集索引类似于一个词典,词典中的目录相当于聚集索引,目录和词语都是按照字母顺序排序的。
由于表中的数据只能按照一种顺序进行存储,因此一个表中最多只能有一个聚集索引。
InnoDB 表上的 MySQL 聚集索引
聚簇索引有助于一个 InnoDB 表优化数据操作,例如 SELECT
, INSERT
, UPDATE
和 DELETE
。
每个 InnoDB 表都需要一个聚集索引。
如果您为 InnoDB 表定义了主键,MySQL 使用主键作为聚集索引。
如果您的表中没有主键,MySQL 将使用第一个所有键列都是 NOT NULL
的 UNIQUE
索引作为聚集索引。
如果 InnoDB 表没有主键或合适的 UNIQUE
索引,MySQL 会在内部生成一个隐藏的聚集索引,名称为 GEN_CLUST_INDEX
,该索引建立在一个包含 ROW ID 值的列上。
除聚集索引外的所有索引均为非聚集索引或二级索引。在 InnoDB 中,二级索引中的每条记录都包含该行的主键列以及非聚集索引中指定的列。MySQL 使用此主键值在聚集索引中进行行查找。
因此,主键较短是有利的,否则二级索引将占用更多空间。通常,自增整数列用于主键列。
结论
- 每个 InnoDB 表都有一个聚集索引。
- 聚集索引决定了表中的行的物理顺序。