MySQL的索引理解

文章摘要

  • 主要对数据库MySQL索引出现的一些重难点的理解。

1.索引的结构

  • MySQL的索引结构是基于B+树实现的,为的就是加快搜索。
1.1为什么索引要选择B+树这种数据结构?
  • B+树高度矮,每个树节点可以存储大量的索引数据,可以极大减少IO次数。
  • 为什么不用二叉搜索树,因为树太高了,IO次数多开销大,父节点和子节点可能不在一个磁盘。
  • 为什么不用跳表,跳表其实和B+树的效率差不多,但是高度还是比较高,每层的链表存储的结点比较少,涉及到IO次数较多,但是Redis就没有这样的问题,Redis是基于内存的数据库,不存在IO的问题。

2.索引的分类

  • 索引分类,一般分为主键索引和非主键索引。
  • 主键索引:不存在回表的情况,叶子结点存储着整个行的数据,是聚集索引。
  • 非主键索引:存在回表的情况,叶子结点存储着索引+主键,以便于回表查询其他信息,是非聚集索引。

3.覆盖索引

  • 覆盖索引是为了减少回表的索引,当非主键索引的叶子结点包含了需要查询的数据就不需要进行回表查询。

4.前缀索引

  • 前缀索引是指联合索引,前缀是指匹配规则,从最左边往右边进行匹配。所以往左边的索引的配置也有一些规范,尽可能小,尽可能不重复等。

5.索引下推

  • 索引下推可以减少查询表的次数,联合索引(judge1,judge2),当按照judge1进行筛选,当有judge2进行判断的时候,MySQL可以进行下推,减少过滤judge2筛选。

6.什么时候会重建索引

  • 存在表的数据减少了一半,表的大小依旧没变?因为还会存在很多的空节点,这些节点没有数据但可以用,表示存在一些空的索引。
  • alter table T engine=InnoDB进行重建索引,可以消除一些空的索引。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿联爱学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值