MySql索引,聚簇索引和非聚簇索,

索引:索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息,就像一本书的目录一样,可以加快查询速度,提高数据库的性能。但是在插入、更新、删除时都需要对索引结构进行维护,这些写操作,增加了大量的IO。所以它的价值,在于提高一个海量数据的检索速度。


聚簇索引和非聚簇索引

聚簇索引也称为主键索引,其索引树的叶子节点中存的是整行数据,数据只能存放在某一个叶子节点中,所以一个表只能包含一个聚集索引。InnoDB 存储引擎的索引模型底层实现数据结构为B+树,所有数据都是存储在 B+ 树中的。

非聚簇索引(普通索引)以主键以外的列值作为键值构建的B+树,叶子节点内容是主键索引的键值。要查找数据库中对应数据,还需要用键值在聚簇索引的B+树中在查找一次,这个过程叫做回表。在 InnoDB 里,非主键索引也被称为二级索引(secondary index)。

示例:创建一张user表,其中id字段为主键,主键上自动创建了主键索引。uid字段上则是普通索引。

create table User(
id int primary key, 
uid int not null, 
name varchar(16),
index (uid))engine=InnoDB;

 假设主键索引对应的B+树结构如下图,那么叶子节点保存的对应data值为数据库中某一行数据,在搜索过程中,只要根据主键指找到其对应的data就能找到对应数据库中的具体数据。比如查找18,通过二分查找最后找到18对应的值(18,kl),其中kl表示存储的18为主键的数据库行的具体值。

 假设是非聚簇索引对应的B+树,叶子节点对应的则是聚簇索引对应B+树的key。比如下图中获取uid为33的key对应的值为33-47,也就是uid为33索引的主键id为47,那么在根据47在上面的聚簇索引树中进行搜索即可。


B+树简述

  • B+树只有叶子节点存储数据(value),其他非叶子节点存储键值(key)
  • B+树的数据是按照顺序排列的

参考:再有人问你为什么MySQL用B+树做索引,就把这篇文章发给她

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值