MySQL中主键索引和二级索引

主键索引

mysql会为主键自动创建主键索引,InnoDB存储引擎采用B+树来创建索引,其非叶子节点只包含索引列(主键),叶子节点包含索引列(主键)和数据,主键索引为聚簇索引。

二级索引

二级索引的非叶子节点存储的是索引列(创建索引的字段值),叶子节点存储的索引列和主键值,二级索引为非聚簇索引,当我们使用二级索引时,如果没有覆盖索引,则需要先找到对应的主键,在到主键索引里面进行回表查找

注:
● 聚簇索引是一种数据的存储方式,即索引和数据存放在一起,并不是一种单独的索引类型,因此主键索引属于聚簇索引,二级索引不属于聚簇索引
● 覆盖索引即我们需要查询的列刚好是索引包含的列,那么找到该索引列就相当于查到了数据,因此无需回表

举个栗子

在这里插入图片描述上图表示在user表的b,c,d三个列创建了联合索引,那么索引树里各个节点存储的索引列值为b,c,d三个列的值(如111, 222)

select * from user where b=1 and c=1

上方语句where后面的条件符合最左前缀匹配原则(b在最前面),因此能走索引,其会从联合索引树的根节点出发,一层层向下找,直到定位到索引列包含b=1及c=1的叶子节点。但此时定位到的索引列只有b,c,d三个列的值,而我们需要查询所有字段值,因此不是覆盖索引,需要回表。

回表即用该叶子节点存储的主键值到主键索引中进行查找。从主键索引树的根节点一层层向下查找到对应主键值的叶子节点,也就能取到该叶子节点包含的数据

推荐文章
一文讲清,MySQL中的二级索引
文中图片转自MySQL索引之道

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值