聚集索引和非聚集索引是mysql数据库中两种主要的索引方式,不同的存储引擎支持索引类型是不一样,那这两种索引有什么不同呢?
聚集索引
只有同时满足以下两个条件,才会创建聚集索引:
- 数据存储有序
- key值应该是唯一的
每当您在表中应用聚集索引时,它将仅在该表中执行排序。您只能在像主键这样的表中创建一个聚集索引。聚簇索引与字典相同,字典按字母顺序排列数据。
在聚集索引中,索引包含指向数据存储的块而不是数据存储地址的指针。
为什么只能建一个聚集索引?
因为聚焦索引决定了表的物理排列顺序,一个表只能有一个物理排列顺序,所以一个表只能建一个聚集索引。
非聚集索引
数据存储在一个位置,索引存储在另一位置。 由于数据和非聚集索引是分开存储的,因此在一个表中可以有多个非聚集索引。
在非聚集索引中,索引包含指向数据的指针。
区别
聚集索引 | 非聚集索引
|:—:|:—:|
聚集索引更快| 非聚集索引较慢
聚集索引需要较少的内存来进行操作。| 非聚集索引需要更多的内存用于操作。
在聚簇索引中,索引是主要数据。| 在非聚集索引中,索引是数据的副本。
一个表只能有一个聚集索引。| 一个表可以有多个非聚集索引。
聚集索引具有将数据存储在磁盘上的固有能力。| 非聚集索引不具有将数据存储在磁盘上的固有能力。
聚集索引存储块指针不是数据指针| 非聚集索引存储值和指向保存数据的实际行的指针。
在聚簇索引中,叶节点是实际数据本身。| 在非聚集索引中,叶节点不是实际数据本身,而是仅包含包含的列。
在聚簇索引中,聚簇键定义表中数据的顺序。| 在非聚集索引中,索引键定义索引内数据的顺序。
聚集索引是一种索引类型,其中表记录在物理上被重新排序以匹配该索引。| 非聚集索引是一种特殊类型的索引,其中索引的逻辑顺序与磁盘上行的物理存储顺序不匹配。