mysql的索引

Mysql索引用一句话概括:是帮助mysql高效获取数据的排好序的数据结构。

  • 数据机结构理解,是存储数据的一种结构。mysql数据结构
    通过数据算法可以在数据结构中快速的获取到数据,减少io次数。

一个索引可以为一个索引页,mysql索引页是由B+Tree的树形结构组成的,如下图:主键索引的树形结构,非叶子节点可以当做冗余节点,只存索引元素,叶子节点上面有所有的数据结构。

在这里插入图片描述

有主键索引就有非主键索引,非主键索引也是一个单独的索引页,和主键索引不同的区别是非主键索引的叶子节点存的是表信息的主键(也可以理解为主键索引的索引元素)。

在这里插入图片描述

为什么非主键索引结构叶子节点存储的是主键值?(一致性和节省存储空间)
  1. 表中每增加一个索引,就会在数据文件增加一个树形的数据结构,主键索引和非主键索引都是一棵树,不同的是非主键索引的叶子结点存的是id(也可以说主键索引的唯一标识,如果主键是id,非主键索引存的就是叶子节点的id,如果没有主键,就是mysql默认选择的列或者虚拟列row_id)。
  2. 如果所有的索引都存在全部数据,会占用很多空间。而且如果所有的索引都存在所有的数据结构的话,在对数据更新的时候,需要对所有索引结构都要更新,如果有一个索引更新失败,那么数据就会更新失败。
回表(非主键索引在查询的时候会涉及到回表)

通过二级索引(非主键索引)进行查找数据的时候,定位二级索引的叶子节点(二级索引的叶子节点上存储的是主键索引的id)上,然后还需要根据逐渐id回到逐渐索引上,查找要查找的数据。

在这里插入图片描述

索引遵循最左原则。

如下图,有一个联合索引,数据根据索引的先后字段进行排序的,如果不遵循索引先后顺序,不满足条件查不到。比如说要查找age=30的,但是在索引中,是先根据name排序,然后根据age排序的,通过age=30查询,发现age不是排好序的,意味着需要全表扫描才能找到name=30的,不满足条件,所以索引失效了。
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值