聚集索引:数据存储和索引是放在一起的,索引结构的叶子结点保存了行数据,必须有且只有一个
非聚集索引(二级索引):将数据与索引分开存储,索引结构的叶子结点关联的是对应的主键,可以有多个
聚集索引的选取规则:
- 如果存在主键,主键索引就是聚集索引
- 如果不存在主键,将使用第一个唯一(UNIQUE)索引作为聚集索引
- 如果表没有主键,或没有合适的唯一索引,则InnoDB会自动生成一个rowid作为隐藏的聚集索引
而除了聚集索引外的都是非聚集索引
Mysql的索引是用B+树作为数据结构,如下图可以帮助你更好的了解二者的区别: