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

从上面图可知 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 快速查找数据?

对于 InnoDb 存储引擎的 B-tree 索引,会按

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值