MySQL 索引总结:14 张图 + 代码 + 文字

本文详细介绍了MySQL中的两种主要索引类型:B-Tree(B+树)和Hash索引。B-Tree索引在叶子节点存储所有值,适用于范围查找,而Hash索引适用于精确匹配。文章通过实例解释了B-Tree索引的结构和查找过程,并对比了聚簇索引与非聚簇索引的区别。此外,还讨论了覆盖索引的概念及其优势。
摘要由CSDN通过智能技术生成

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

从上面图可知 B+树的叶子节点存放了所有的索引值,并且叶子结点之间以链表的形式相互关联,所以我们只需从最左的链表遍历的话即可查找所有的值,最常见的用途就是范围查找,而 B 树则不满足这范围查找,又或者说实现特别复杂,所以 Mysql 最终选择了使用 B+树实现这一功能。

1.1 B-Tree 索引(B+树)

先说明一下,虽然叫在MySQL官方叫做 B-Tree 索引,但采用的是 B+树数据结构。

B-tree 索引能够加快访问数据的速度,不需要进行全表扫描,而是从索引树的根节点层层往下搜索,在根节点存放了索引值和指向下一个节点的指针。

下面看下单列索引的数据怎么组织的。

create table User(name varchar(50) not null,uid int(4) not null,gender int(2) not null, key(uid) );

上面 User 表给 uid 列创建了一个索引,那么往表里插入 uid(96~102)的时候存储引擎是怎么管理索引的呢?看下面的索引树

1.在叶子节点存放所有的索引值,非叶子节点值是为了更快定位包含目标值的叶子节点

2.叶子节点的值是有序的

3.叶子节点之间以链表形式关联

下面在看一下多列(联合)索引的数据怎么组织的。

create table User(name varchar(50) not null,uid int(4) not null,gender int(2) not null, key(uid,name) );

给 User 表创建了联合索引 key(uid,name) 这种情况下他的索引树是如下图所示。

特点跟单列索引一样,不同之处在于他的排序,如果第一个字段相同时会按第二个索引字段排序

如何通过 B-tree 快速查找数据&#x

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值