MySQL Clustered Index

2025年3月17日 | 阅读 3 分钟

索引是一种独立的数据结构,允许我们在现有表中添加索引。它能帮助我们加快数据库表中记录的检索速度。它为每个索引列的值创建一个条目。

聚集索引实际上是一个存储行数据的数据表。它根据键值定义了表数据的顺序,这些键值只能以一种方式排序。在数据库中,每个表只能有一个聚集索引。在关系型数据库中,如果表列包含主键或唯一键,MySQL 允许您基于该特定列创建一个名为 PRIMARY 的聚集索引。

特性

聚集索引的基本特征如下:

  • 它帮助我们同时存储数据和索引。
  • 它根据键值以唯一的方式存储数据。
  • 键查找。
  • 它们是扫描和索引查找。
  • 聚集索引总是使用一个或多个列来创建索引。

优点

聚集索引的主要优点如下:

  • 它帮助我们最大化缓存命中,最小化页面传输。
  • 它是处理范围或带有 max、min 和 count 查询的组的理想选择。
  • 在范围的起始处,它使用定位机制来查找索引条目。

缺点

聚集索引的主要缺点如下:

  • 它包含许多非顺序插入的记录。
  • 它会产生许多常量页面分裂,如数据页或索引页。
  • 更新记录总是需要很长时间。
  • 它需要额外的 SQL 查询工作,如插入、更新和删除。

InnoDB 表上的聚集索引

MySQL InnoDB 表必须具有聚集索引。InnoDB 表使用聚集索引来优化大多数常见查找和 DML(数据操纵语言)操作(如 INSERT、UPDATE 和 DELETE 命令)的速度。

当在 InnoDB 表中定义主键时,MySQL 总是将其用作名为 PRIMARY 的聚集索引。如果表不包含主键列,MySQL 会查找唯一键。在唯一键中,所有列都不为空,并将其用作聚集索引。有时,表既没有主键也没有唯一键,那么 MySQL 会内部创建一个隐藏的聚集索引 GEN_CLUST_INDEX,其中包含行 ID 的值。因此,InnoDB 表中只有一个聚集索引。

除 PRIMARY 索引(聚集索引)之外的索引称为二级索引或非聚集索引。在 MySQL InnoDB 表中,非聚集索引的每个记录都具有行和列的主键列。MySQL 使用此主键值在聚集索引或二级索引中查找行。

示例

在下面的语句中,PRIMARY KEY 是一个聚集索引。