从数据页的角度理解B+树查询

数据库中的存储结构是怎样的。

* 在数据库中,不论读一行,还是读多行,都是将这些行所在的页进行加载。也就是说,数据库管理存储空间的基本单位是页。
* 行 《 页 《 区 《 段 《 表。

在这里插入图片描述

  • 区: 比页大一级的存储结构,在InnoDB存储引擎中,一个区会分配64个连续的页。
  • 页:默认大小是16KB
  • 段:由一个或多个区组成,区在文件系统是一个连续分配的空间,在InnoDB是连续的64个页,不过在段中不哟啊求区与区之间是相邻的。段是数据库中的分配单位,不同类型的数据库对象以不同的段形式存在。当我们创建数据表,索引的时候,就会相应的创建对应的段。
  • 表:是一个逻辑容器,表空间存储的对象是段,在一个表空间中可以有一个或多个段,但是一个段只能属于一个表空间。
  • 数据库:由一个或多个表空间组成。

数据页内的结构是怎样的

类型划分

1. 数据页
2. 系统页
3. Undo页
4. 事务数据页

页结构(总计16KB)

1. 文件头	38字节, 描述页的信息
2. 页头	56字节,页的状态信息
3. 最大最小记录	26字节,是两个虚拟的行记录
4. 用户记录	不确定, 存储行记录内容
5. 空闲空间	不确定, 页中还没有被使用的空间
6. 页目录	不确定, 存储用户记录的相对位置
7. 文件尾	8字节, 校验页是否完整。

分成三大部分

1. 文件通用部分。文件头和文件尾
2. 记录部分。最小,最大记录,用户记录。
3. 索引部分。页目录, 记录索引的作用。
		* 将所有的记录分成几个组,包括最小记录和最大记录,但不包括标记为“已删除的记录”
		* 第1组,最小记录的分组,只有一个记录。最后一组,最大记录的分组,有1~8条记录。其余的组的记录数量在4~8之间。
		* 在每个组中最后一条记录的头信息会存储该组一共有多少条记录,作为n_owned字段。
		* 页目录用来存储每组最后一条记录的地址偏移量,

从数据页的角度看B+树是如何进行查询的

1. B+树是如何进行记录检索的
如果通过 B+ 树的索引查询行记录,首先是从 B+ 树的根开始,逐层检索,直到找到叶子节点,也就是找到对应的数据页为止,将数据页加载到内存中,页目录中的槽(slot)采用二分查找的方式先找到一个粗略的记录分组,然后再在分组中通过链表遍历的方式查找记录。
2. 普通索引和唯一索引在拆线呢效率上有什么不同
唯一索引就是在普通索引上增加了约束性,也就是关键字唯一,找到了关键字就停止检索。而普通索引,可能会存在用户记录中的关键字相同的情况,根据页结构的原理,当我们读取一条记录的时候,不是单独将这条记录从磁盘中读出去,而是将这个记录所在的页加载到内存中进行读取。InnoDB 存储引擎的页大小为 16KB,在一个页中可能存储着上千个记录,因此在普通索引的字段上进行查找也就是在内存中多几次“判断下一条记录”的操作,对于 CPU 来说,这些操作所消耗的时间是可以忽略不计的。所以对一个索引字段进行检索,采用普通索引还是唯一索引在检索效率上基本上没有差别。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值