【回顾】MySQL索引的实现原理(一)

一、索引的数据结构

索引说白了就是用一个数据结构组织某一列的数据,然后如果你要根据那一列的数据进行查询的时候,就可以不进行全表扫描,只要根据那个特定的数据结构去找到那一列中的值,然后却找到相对应的记录的物理地址即可。

MySQL的索引是使用B+树这种数据结构来实现的,要解释B+树,首先要解释清楚B-树:
在这里插入图片描述
比如我们现在有一张表:
{
id int
name varchar
age int
}
我们现在对id建了一个索引,这些值就存在了如上图的B-树中,B-树是一种排好了序的数据结构;
要查找id为某个值的记录时,直接从根节点开始二分查找即可。

B+树与B-树的区别:
非叶子节点不存储data,叶子节点不存储指针,如图:
在这里插入图片描述
要查找id为某个值的记录时,必须要到叶子节点才能拿得到要找的data;
数据库的索引一般都对B+树进行了优化,加上了顺序访问的指针。

二、MyISAM引擎的索引实现

MyISAM最大的特点是数据文件和索引文件时分开的,叶子节点的data中存的是要找记录的物理地址的值,如0x07,代表数据文件中的记录地址;

三、InooDB引擎的索引实现

要求必须有主键,默认会根据主键创建一个索引;
InnoDB的数据文件本身同时也是一个索引文件,这个索引就是默认根据主键建立的,称为聚簇索引;正是因为这个原因,InnoDB表是要求必须有主键的,但是MyISAM表不要求必须有主键;
另外值得一提的是,在InnoDB引擎下,如果对某个非主键的字段创建一个索引,那么这个索引中,叶子节点的值就是主键的值,再根据主键的值到聚簇索引中再次进行查找,得到数据。
在InnoDB存储引擎中,对于同样的索引文件:
在这里插入图片描述
data存储的就不再是0x07这样的物理地址的值,data中存放的就是完整的一行数据,如(15,张三,22)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值