聚簇索引、回表与覆盖索引

聚簇索引一般指的是主键索引(如果存在主键索引的话)。

作为一个正常开发,建表时主键肯定是必须的。

而即使如果表中没有定义主键,InnoDB 会隐式选择一个唯一的非空索引代替。

所以我们就直接含糊点说:

聚簇索引就是主键索引!其余的都是非聚簇索引。

聚簇索引、回表与覆盖索引_第1张图片

那到底什么是聚簇索引,什么是非聚簇索引

聚簇就是扎一堆儿。

聚簇索引就是将数据存储与索引放到了一块,找到索引也就找到了数据

在 innodb 中,在聚簇索引之上创建的索引称之为辅助索引,非聚簇索引都是辅助索引,像复合索引、前缀索引、唯一索引。

辅助索引叶子节点存储的不再是行的物理位置,而是主键值。辅助索引访问数据总是需要二次查找

而这个二次查找的过程我们给它起个名字就叫做:回表

而可以想象,回表就意味着更多磁盘IO,也就意味着慢。

也就是说回表并不是我们想见到的东西。

聚簇索引、回表与覆盖索引_第2张图片

如何避免回表

那就要说到覆盖索引,从名字上也应该可以猜出什么是覆盖索引了。

你不是不想二次查询吗?那就直接一次查询。

那怎么能一次就查出来?索引覆盖!

聚簇索引、回表与覆盖索引_第3张图片

什么是索引覆盖

就是把单列的非主键索引修改为多字段的联合索引,在一棵索引树上就找到了想要的数据,不需要去主键索引树上,再检索一遍这个现象,称之为索引覆盖

当然这样也会导致索引的存储空间,相当于以空间换时间,实际开发中需要自己做取舍。


文章推荐:

● 师爷,翻译翻译什么叫AOP

● 终于搞懂动态代理了!

● 学会@ConfigurationProperties月薪过三千

● 0.o?让我看看怎么个事儿之SpringBoot自动配置

● 不是银趴~是@Import!

● Java反射,看完就会用

你可能感兴趣的:(MySQL,性能优化,数据库)