📜  MySQL聚集索引

📅  最后修改于: 2020-11-17 03:34:25             🧑  作者: Mango

MySQL集群索引

索引是一个单独的数据结构,它使我们可以在现有表中添加索引。它使您能够改进更快地检索数据库表上的记录。它为索引列的每个值创建一个条目。

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

特点

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

  • 它帮助我们同时存储数据和索引。
  • 它仅基于键值以一种方式存储数据。
  • 关键查找。
  • 它们是扫描和索引搜索。
  • 聚集索引始终使用一个或多个列来创建索引。

好处

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

  • 它有助于我们最大化缓存命中率,并最大程度地减少页面传输。
  • 对于具有最大,最小和计数查询的范围或组,它是理想的选择。
  • 在范围的开始,它使用定位机制来查找索引条目。

缺点

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

  • 它包含许多不按顺序排列的插入记录。
  • 它创建许多恒定的页面拆分,例如数据页面或索引页面。
  • 更新记录总是需要很长时间。
  • 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是聚集索引。

CREATE TABLE `student_info` (
  `studentid` int NOT NULL AUTO_INCREMENT,
  `name` varchar(45) DEFAULT NULL,
  `age` varchar(3) DEFAULT NULL,
  `mobile` varchar(20) DEFAULT NULL,
  `email` varchar(25) DEFAULT NULL,
  PRIMARY KEY (`studentid`), //clustered index
  UNIQUE KEY `email_UNIQUE` (`email`)
)