InnoDB在MySQL5.5版本以后已经成为MySQL的默认存储引擎,我们来分析一个InnoDB的索引模型。InnoDB采用B+树的索引模型,InnoDB的主键索引是聚簇索引。
聚簇索引并不是一种单独的索引类型,而是一种数据存储方式。当表有聚簇索引时,它的数据行实际上是放在索引的叶子节点上。相应的如果数据行是单独存放,而索引的叶子节点只保存了数据行指针的存储方式就是非聚簇索引。因为不可能把数据行同时放在两个不同的地方,所以一个表最多只能有一个聚簇索引。
然后我们比较一下聚簇索引与非聚簇索引的存储特性。直接引用《高性能MySQL》一书中关于聚簇索引与非聚簇索引比较的图片。左边是聚簇索引和主键索引和二级索引,右边是非聚簇索引的主键索引和二级索引。
聚簇索引的主键索引,数据行是和索引在一起的;
非聚簇索引的主键索引,数据行和索引分开存储,索引中保存数据行的地址;
聚簇索引的二级索引中,保存的是主键索引的值。之所以保存主键索引的值,而不是保存数据行的地址,是因为聚簇索引会发生页分裂,页分裂后数据存储的地址就会发生变化。当页地址发生变化后,只需要维护主键索引的数据即可,不需要维护二级索引,减少了索引的维护工作;
非聚簇索引的主键索引和二级索引没有什么实质性的区别。
事实上,InnoDB索引模型是MySQL索引中非常重要的一个索引模型,能够有效地帮助我们理解MySQL数据库的索引方式和原理。在动力节点在线网站上对于MySQL索引的整个知识体系有很透彻的解析,要学习的小伙伴千万不要错过,免费学习的机会就在眼前。
代码小兵86504-19 19:55
代码小兵49806-21 15:40
代码小兵69607-21 11:32
代码小兵87207-21 12:51