聚簇索引、回表与覆盖索引
聚簇索引一般指的是主键索引(如果存在主键索引的话)。
作为一个正常开发,建表时主键肯定是必须的。
而即使如果表中没有定义主键,InnoDB 会隐式选择一个唯一的非空索引代替。
所以我们就直接含糊点说:
聚簇索引就是主键索引!其余的都是非聚簇索引。
那到底什么是聚簇索引,什么是非聚簇索引?
聚簇就是扎一堆儿。
聚簇索引就是将数据存储与索引放到了一块,找到索引也就找到了数据。
在 innodb 中,在聚簇索引之上创建的索引称之为辅助索引,非聚簇索引都是辅助索引,像复合索引、前缀索引、唯一索引。
辅助索引叶子节点存储的不再是行的物理位置,而是主键值。辅助索引访问数据总是需要二次查找。
而这个二次查找的过程我们给它起个名字就叫做:回表。
而可以想象,回表就意味着更多磁盘IO,也就意味着慢。
也就是说回表并不是我们想见到的东西。
那如何避免回表?
那就要说到覆盖索引,从名字上也应该可以猜出什么是覆盖索引了。
你不是不想二次查询吗?那就直接一次查询。
那怎么能一次就查出来?索引覆盖!
那什么是索引覆盖?
就是把单列的非主键索引修改为多字段的联合索引,在一棵索引树上就找到了想要的数据,不需要去主键索引树上,再检索一遍这个现象,称之为索引覆盖。
当然这样也会导致索引的存储空间,相当于以空间换时间,实际开发中需要自己做取舍。
文章推荐:
● 学会@ConfigurationProperties月薪过三千