SQL 必知必会
陈旸
清华大学计算机博士
73338 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 50 讲
第一章:SQL语法基础篇 (19讲)
SQL 必知必会
15
15
1.0x
00:00/00:00
登录|注册

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

普通索引和唯一索引的查询效率
从根节点逐层检索
叶子节点、非叶子节点
文件头、页头、记录、空闲空间、页目录、文件尾
区、段、表空间的关系
页是存储空间的基本单位
思考题
链表结构
存储单位
记录检索
B+树的结构
数据页的组成部分
数据页的类型
页、区、段、表空间
总结
B+树查询
数据页内的结构
数据库存储结构

该思维导图由 AI 生成,仅供参考

我们之前已经了解了 B+ 树和 Hash 索引的原理,这些索引结构给我们提供了高效的索引方式,不过这些索引信息以及数据记录都是保存在文件上的,确切说是存储在页结构中。
对数据库的存储结构以及页结构的底层进行了解,可以加深我们对索引运行机制的认识,从而你对索引的存储、查询原理,以及对 SQL 查询效率有更深的理解。
今天的课程主要包括下面几个部分:
数据库中的存储结构是怎样的?页、区、段和表空间分别指的是什么?
为什么页(Page)是数据库存储空间的基本单位?
从数据页的角度来看,B+ 树是如何进行查询的?

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

记录是按照行来存储的,但是数据库的读取并不以行为单位,否则一次读取(也就是一次 I/O 操作)只能处理一行数据,效率会非常低。因此在数据库中,不论读一行,还是读多行,都是将这些行所在的页进行加载。也就是说,数据库管理存储空间的基本单位是页(Page)。
一个页中可以存储多个行记录(Row),同时在数据库中,还存在着区(Extent)、段(Segment)和表空间(Tablespace)。行、页、区、段、表空间的关系如下图所示:
从图中你能看到一个表空间包括了一个或多个段,一个段包括了一个或多个区,一个区包括了多个页,而一个页中可以有多行记录,这些概念我简单给你讲解下。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入解析了B+树查询的原理,从数据页的角度出发,介绍了数据库中的存储结构,包括页、区、段和表空间的概念及其关系。详细讲解了数据页内的结构,包括文件头、页头、记录部分、空闲空间、页目录等组成部分的作用和结构。通过图示和实例,生动地解释了这些概念和结构在数据库中的作用和运行机制。读者可以深入了解数据库存储结构和页的内部结构,从而对索引的存储、查询原理有更深的理解。文章还探讨了B+树的结构,如叶子节点和非叶子节点的特点,以及B+树进行记录检索的原理。此外,还对普通索引和唯一索引在查询效率上的不同进行了分析。总结了数据库中的基本存储单位,页的特点,以及链表数据结构的应用。文章以问题引导思考,鼓励读者参与交流讨论。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《SQL 必知必会》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(44)

  • 最新
  • 精选
  • 我行我素
    1.逻辑上连续的,在文中有说采用链表的结构让数据页之间不需要是物理上的连续,而是逻辑上的连续; 2.二分查找发,在总结图中有详细的说明,首先是从B+树的根开始,逐层检索直到叶子节点,找到叶子节点对应的数据页,将数据页加载到内存中,通过页目录中的槽采用二分查找的方式先找到一个粗略的记录分组,在分组中通过链表遍历的方式进行记录的查找

    作者回复: 总结的不错

    2019-08-12
    5
    32
  • 吴小智
    请问一下老师,这些内容的源头是在哪里呢?想去源头看看

    作者回复: 感谢兴趣,最直接的来源就是官方的Document,比如 https://dev.mysql.com/doc/internals/en/innodb-fil-header.html 而且检索起来也很方便,比如你想要查询优化器的cost model是如何设计的,就可以找到 https://dev.mysql.com/doc/refman/8.0/en/cost-model.html

    2019-08-23
    14
  • 程序员花卷
    第一个问题 我认为物理上是连续的(具体原因我现在还说不出来,因为这个问题感觉逻辑连续和物理连续都没有绝对的说法,后面补上) 第二个问题 B+树的检索流程是一个自顶向下,逐层检索的过程!具体的过程老师在24讲以及这一讲中已经说的很明白了! 我得认真思考!老师的问题总是很耐人寻味! 题外话:希望大家都继续坚持学习,学习是一辈子的事,不要渴望一遍两遍就掌握某个东西!很多东西都是在反反复复的学习之中的某个时刻突然领悟的!加油!

    作者回复: 学习是一辈子的事,感谢加武同学的分享

    2019-12-23
    4
  • 聚集索引是在物理上的顺序和逻辑上的顺序相同

    作者回复: 对的

    2019-11-22
    4
  • 往事随风,顺其自然
    逻辑上连续的,记录之间采用单链表方式实现

    作者回复: 对的

    2019-08-12
    4
  • geraltlaush
    A clustered index, on the other hand, is actually the table. It is an index that enforces the ordering on the rows of the table physically.物理上连续的

    作者回复: 对的

    2019-09-12
    6
    2
  • 习惯沉淀
    老师,“在B+树中,每一个节点都是一个页”这句,有点不太理解,非叶子节点不是不存放行记录吗,非叶子节点就是页,只不过页里面不存放数据是这意思吗?

    作者回复: 对 B+树的非叶子节点不存放具体的行记录数据。

    2019-08-20
    2
  • Yuhui
    请教一下老师,”通过文件尾的校验和(checksum 值)与文件头的校验和做比较“来判断页数据传输是否完整这个是怎么回事?谢谢!

    作者回复: 校验和checksum经常用于数据传输过程中的数据完整性/准确性校验。checksum算法有很多,举个例子比如MD5算法,在文件头的时候给出完整的文件应该得到的MD5数值为多少,等到文件尾的时候,再使用MD5对整体进行运算,看下和文件头给出的是否一致。如果一致,则说明传输过程是完整正确的,如果不一致则存在错误,需要重新传输。

    2019-09-19
    2
    1
  • asdf100
    对页里查找记录时,可先根据二分查找法,先找到记录所有在槽,时间复杂度为O(log2n)。槽内有多条记录,再遍历所有记录,直到找到指定记录为止,时间复杂度为O(n)。

    作者回复: 正确

    2019-08-13
    1
  • asdf100
    遍历槽 3 中的所有记录,找到关键字为 9 的记录,取出该条记录的信息即为我们想要查找的内容。由于单链表,所以查询复杂度为O(n)

    作者回复: 对的

    2019-08-13
    1
收起评论
显示
设置
留言
44
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部