Mysql原理系列一:mysql数据存储与索引

MySQL使用不同存储引擎来存储数据,我们平时用的基本都是InnDB引擎存储数据。

1.数据

核心点: 表>段>区》页>行

数据的存储

InnDB逻辑上把数据存放到表空间中,表空间是最高的逻辑存储单位,表空间下是段, 段下是区, 区下是页。页作为最小的逻辑存储单位,默认情况下是16kb
在这里插入图片描述

数据页结构page

页是InnoDB存储引擎管理数据的最小磁盘单位。

一个InnoDB页的UserRecords部分就是存放记录的地方。

在这里插入图片描述

行记录的存储

行数据的存储:页是磁盘的最小单位,数据在InnDB存储引擎中都是按行存放在页的User Records . 每个16KB大小的页大约存储2-200行记录

行溢出数据:在存储VARCHAR或者BLOB大对象时,将行的前768个字节存储在数据页中, 后面的通过偏移量指向溢出页BLOB Page

2.索引

索引提高了查找行的速度。建立索引的根本目的是降低IO次数。

索引的数据结构

InnDB存储引擎在绝大数情况下都是使用B+树来建立索引。B+树查找任何节点的步数是一样的, 是B+树的高度,所以时间复杂度稳定。

聚集索引和辅助索引

区别在于: 聚集索引叶子节点存放的是一条行记录的所有信息,; 辅助索引叶子节点存储的用于查找对应记录的主键 ,所以还需要去聚集索引进行查询

聚集索引:

InnoDB在存数据的时候都是按照索引组织数据的. 聚集索引就是按照表中的主键顺序构建的一颗B+树, 并且在叶子节点存放表中的行记录.

例如: USER表数据, 就是按照主键ID作为索引组织的B+树.
在这里插入图片描述

当我们使用ID查询数据的时候,直接使用聚集索引找到 对应的行所在的页,将页加载到内存中. 无需二次查询

辅助索引:

所有的非聚集索引都可以称为辅助索引, 辅助索引也是按照B+树实现的, 但是他的叶子节点存储的是用于查找对应行记录的一个书签,

列如:User表。 在name上建立了一个索引。形成一个以为name字段对应的值形成的B+树索引树。 叶子节点存储的是主键ID.
在这里插入图片描述

3.总结

聚集索引构成B+树是数据实际存储的形式, 辅助索引只是用于加速数据的查找.

一个张表一定是包含一个聚集索引构成的B+树 和 N个辅助索引构成的B+树

列如User表。 数据按照主键顺序,形成聚簇索引类型的B+树 。我们们在name字段上添加添加索引,按照name字段顺序,形成辅助索引类型的B+树(叶子节点存储主键记录), 我们在根据name查找时,辅助索引找到主键记录, 然后到聚簇索引树,找到具体的行,然后把行所在的页加载到内存中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值