2026-10-20 16:37:18
聚簇索引是MySQL中对磁盘上实际数据重新组织,使其按指定一个或多个列的值排序的算法。
特点如下:
存储数据的顺序与索引顺序完全一致。这种一致性使得数据在物理存储层面与索引结构紧密关联,数据行的物理位置直接由索引键值决定。例如,若按主键“ID”建立聚簇索引,数据行会严格按ID值的升序或降序排列存储。
主键默认创建聚簇索引:当表定义主键时,MySQL会自动以主键列构建聚簇索引。若未显式定义主键,InnoDB引擎会选择第一个非空的唯一索引(UNIQUE KEY)作为聚簇索引;若此类索引也不存在,则会隐式创建一个6字节的ROWID作为聚簇索引键。
一张表仅允许一个聚簇索引:由于数据物理存储顺序只能遵循一种规则,因此聚簇索引具有唯一性。例如,无法同时按“ID”和“姓名”两列分别建立聚簇索引,否则数据会因排序冲突而无法存储。
与非聚簇索引的区别:聚簇索引的叶子节点直接存储数据行(即数据节点),而非聚簇索引的叶子节点仅存储索引键值及指向数据行的指针(书签)。例如,查询“SELECT * FROM users WHERE id=100”时,若“id”是聚簇索引,可直接从索引结构中获取数据;若“id”是非聚簇索引,则需先通过索引找到主键值,再通过聚簇索引定位数据行(回表操作)。
优势与劣势:
优势:主键查询效率高,尤其是当查询条件包含主键且返回少量数据时,无需回表操作,可直接从索引结构中获取数据。
劣势:数据插入若不符合索引顺序(如随机主键),会导致频繁的页分裂(Page Split),即数据页因空间不足而分裂为两个页,并重新分配数据,这会降低插入性能并增加存储碎片。