InnoDB存储引擎——索引

二叉查找树

  • 左子树比根节点小
  • 右子树比根节点大
  • 通过中序遍历,得到从小到大的排序
    在这里插入图片描述
    数据查找方式,如查询 5 的记录,
    先找根节点 8,8大于5;
    查找8的左子树,找到4,4小于5;
    查找4的右子树,找到5;
    一共找了3次

二叉查找树可以任意构造,极端情况下会退化成链表,如图所示
在这里插入图片描述
如果想要查询9,需要遍历整个链表,查询6次,查询效率就低了。这时候就需要这棵树是平衡的,于是就有了平衡二叉树,也叫AVL树

平衡二叉树(AVL树)

  • 首先,满足二叉查找树定义
  • 其次,所有节点的左右子树最大高度差不超过1

平衡二叉树查询速度快,但是维护这棵树的代价比较大,为了保持平衡,每当有数据加入或删除时,需要通过多次左旋或右旋操作来保持树的平衡。

B+树

B+树是一棵多路搜索树,和二叉树相比,一个父节点下可以有多个(大于2)子节点,各个叶子节点上的数据都是有序的,
和B-树比特殊的地方:

  • 所有数据存放在叶子节点上
  • 非叶子节点作为叶子节点的索引
  • 叶子节点之间由双向指针组成一个双向链表

索引

MySQL中索引基于B+树结构存储,数据库中B+树的高度一般在2~4层,也就是查找某一键值最多需要2 ~ 4 次IO。
B+树索引分为聚集索引和辅助索引,聚集索引和辅助索引不同的是叶子节点存放的是否是完整的信息

聚集索引

由表主键构成的一棵B+树,也叫主键索引。
叶子节点存放数据页,每个数据页之间通过双向链表进行链接
单个数据页中的数据是有序存放的
在这里插入图片描述

辅助索引

由表除主键外的其他字段构成的一棵B+树
叶子节点存放索引键值 + 主键值
查找数据时,先在辅助索引里查找,如果辅助索引里的字段满足查询返回所需的数据,则直接返回;否则进行回表查询,根据主键按照主键索引定位数据页,从数据页中找到所需的数据
在这里插入图片描述

联合索引

联合索引也是一种辅助索引,是由多个字段组成的一个B+树。
在这里插入图片描述
遵循最左匹配原则

覆盖索引

又称为索引覆盖,从辅助索引中就可以得到查询的记录,而不需要查询聚集索引中的记录。使用覆盖索引,可以减少回表操作,降低IO操作

唯一索引

不允许列有重复的值,和主键一样,同样可以提高访问效率。

索引失效原因
  • 根据普通索引查询某一范围表中所有字段数据,导致索引失效。
    例如 select * from tb_user where no > 12345;
    由于需要查询整张表中的数据,通过普通索引只能找到主键,还需要回表根据主键查询其他字段信息,虽然普通索引是有序的,如果再进行一次回表,则查找的数据就变成无序了,在磁盘上变成了随机读操作。如果访问量小,查询优化器还是会选择普通索引,但是访问数据量比较大(一般是整表的20%左右),优化器会选择主键索引来查找数据,因为顺序读取要远远快于随机读。

  • 使用联合索引,未遵循最左匹配原则进行SQL查询

  • 查询条件使用函数在索引列上,导致索引失效,例如:timestamp(column) = ‘2021-01-22’

  • 使用 like 模糊查询百分号在前面,like ‘%xxxx%’(索引失效),like ‘xxx%’ 索引还是有效的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值