java八股文面试[数据库]——Page页的结构

mysql中数据是存储在物理磁盘上的,而真正的数据处理又是在内存中执行的。由于磁盘的读写速度非常慢,如果每次操作都对磁盘进行频繁读写的话,那么性能一定非常差。为了上述问题,InnoDB将数据划分为若干页,以页作为磁盘与内存交互的基本单位,一般页的大小为16KB。这样的话,一次性至少读取1页数据到内存中或者将1页数据写入磁盘。通过减少内存与磁盘的交互次数,从而提升性能

其实,这本质上就是一种典型的缓存设计思想,一般缓存的设计基本都是从时间维度或者空间维度进行考量的:

  • 时间维度:如果一条数据正在在被使用,那么在接下来一段时间内大概率还会再被使用。可以认为热点数据缓存都属于这种思路的实现。
  • 空间维度:如果一条数据正在在被使用,那么存储在它附近的数据大概率也会很快被使用。InnoDB的数据页和操作系统的页缓存则是这种思路的体现。

Page是整个InnoDB存储的最基本构件,也是InnoDB磁盘管理的最小单位,与数据库相关的所有内容都存储在这种Page结构里。

Page分为几种类型,常见的页类型有数据页(B+tree Node)Undo页(Undo Log Page)系统页(System Page) 事务数据页(Transaction System Page)等

image.png

Page 各部分说明

名称占用大小说明
File Header38字节文件头, 描述页信息
Page Header56字节页头,页的状态
Infimum + Supremum26字节最大和最小记录,这是两个虚拟的行记录
User Records不确定用户记录,存储数据行记录
Free Space不确定空闲空间,页中还没有被使用的空间
Page Directory不确定页目录,存储用户记录的相对位置
File Trailer8字节文件尾,校验页是否完整
  • File Header 字段用于记录 Page 的头信息,其中比较重要的是 FIL_PAGE_PREV 和 FIL_PAGE_NEXT 字段,通过这两个字段,我们可以找到该页的上一页和下一页,实际上所有页通过两个字段可以形成一条双向链表

  • Page Header 字段用于记录 Page 的状态信息

  • Infimum 和 Supremum 是两个伪行记录,Infimum(下确界)记录比该页中任何主键值都要小的值,Supremum (上确界)记录比该页中任何主键值都要大的值,这个伪记录分别构成了页中记录的边界

  • User Records 中存放的是实际的数据行记录

  • Free Space 中存放的是空闲空间,被删除的行记录会被记录成空闲空间

  • Page Directory 记录着与二叉查找相关的信息

  • File Trailer 存储用于检测数据完整性校验和等数据

页结构整体上可以分为三大部分,分别为通用部分(文件头、文件尾)、存储记录空间、索引部分。

1) 通用部分 (File Header&File Trailer )

通用部分 : 主要指文件头和文件尾,将页的内容进行封装,通过文件头和文件尾校验的CheckSum方式来确保页的传输是完整的。

其中比较重要的是在文件头中的 FIL_PAGE_PREVFIL_PAGE_NEXT 字段,通过这两个字段,我们可以找到该页的上一页和下一页,实际上所有页通过两个字段可以形成一条双向链表

image.png

2) 记录部分(User Records&Free Space)

页的主要作用是存储记录,所以“最小和最大记录”和“用户记录”部分占了页结构的主要空间。另外空闲空间是个灵活的部分,当有新的记录插入时,会从空闲空间中进行分配用于存储新记录

image.png

3)数据目录部分 (Page Directory)

数据页中行记录按照主键值由小到大顺序串联成一个单链表(页中记录是以单向链表的形式进行存储的),且单链表的链表头为最小记录,链表尾为最大记录。并且为了更快速地定位到指定的行记录,通过 Page Directory实现目录的功能,借助 Page Directory使用二分法快速找到需要查找的行记录。

image.png

MySQL中page的作用及用法
 

在使用MySQL进行数据查询时,我们经常会需要分页查询来处理大量的数据。MySQL中的page功能可以帮助我们实现这个目的。本文将介绍MySQL中page的作用及用法。

page的作用

page的作用是将查询结果按照指定的大小分割成一个或多个页面。通过page,我们可以避免在查询大量数据时,一次性将所有结果返回给客户端,从而提高查询效率和响应时间。

page的用法

在MySQL中,我们可以使用LIMIT关键字来使用page功能。LIMIT后面的两个参数分别表示查询结果的偏移量和限制数量

以下是一个简单的使用LIMIT实现分页查询的示例:

SELECT * FROM table LIMIT 0,10;

SELECT * FROM table LIMIT 10,10;

SELECT * FROM table LIMIT 20,10;

在上述示例中,第一条SQL语句查询表中第1到第10条数据,第二条SQL语句查询表中第11到第20条数据,第三条SQL语句查询表中第21到第30条数据。

除了使用LIMIT关键字,还可以使用OFFSET关键字来指定查询结果的偏移量。下面是一个使用OFFSET实现分页查询的示例:

SELECT * FROM table LIMIT 10 OFFSET 20;

该SQL语句查询表中第21到第30条数据。

需要注意的是,LIMIT语句的性能取决于查询语句中的条件和索引。当查询语句中有WHERE子句时,可以通过建立合适的索引来提高查询效率。同时,OFFSET的值不能太大,否则会导致性能下降

另外,MySQL还支持使用两个关键字来实现复杂的分页查询,它们分别是TOP和ROWNUM。以下是使用TOP和ROWNUM来实现分页查询的示例:

SELECT TOP 10 * FROM table WHERE ROWNUM >= 20;

SELECT * FROM (SELECT * FROM table WHERE ROWNUM = 20;

第一条SQL语句查询表中第20到第29条数据,第二条SQL语句查询表中第20到第30条数据。

总结

MySQL中的page功能可以帮助我们实现分页查询,从而提高查询效率和响应时间。通过LIMIT和OFFSET等关键字,我们可以轻松地实现分页查询。在使用page功能时,需要注意查询语句中的条件和索引,以及OFFSET的值不能过大。

知识来源:马士兵教育

MySQL原理篇-page页 - 知乎

MySQL中page的作用及用法(MySQL中page)-数据库运维技术服务

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/69729.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法通关村第十九关——最小路径和

LeetCode64. 给定一个包含非负整数的 m n 网格 grid,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 输入:grid[[1,3,1],[1,5,1],[4,2,1]] 输出:7 解释:因为路径1→3→1→1→1的总和最小。 public int minPath…

Qt鼠标点击事件处理:按Escape键退出程序

创建项目 Qt 入门实战教程(目录) 首先,创建一个名称为QtKeyEscape的Qt默认的窗口程序。 参考 :Qt Creator 创建 Qt 默认窗口程序 Qt响应键盘Escape事件 打开Qt Creator >>编辑 >> 项目 >> Headers>> …

【iVX】iVX的低代码未来发展趋势:加速应用开发的创新之路

简介: 随着数字化转型的飞速发展,企业和组织对快速开发和交付高质量应用的需求越来越迫切。低代码开发平台作为一种创新的解决方案,极大地简化了应用程序的开发过程。在这一领域,iVX低代码平台作为领先的创业公司,正在…

Python小知识 - Python爬虫进阶:如何克服反爬虫技术

Python爬虫进阶:如何克服反爬虫技术 爬虫是一种按照一定的规则,自动抓取网页信息的程序。爬虫也叫网页蜘蛛、蚂蚁、小水滴,是一种基于特定算法的自动化程序,能够按照一定的规则自动的抓取网页中的信息。爬虫程序的主要作用就是从一…

python基础知识

1、不使用反转函数,将字符串逆序 str "abcdefg" str[::-1]2、求从10到100中能被3与5整除的数和 a[] for i in range(10,100):if i%3 0 and i%50:a.append(i) print(a,sum(a))3、什么是python 一种解释性语言、动态语言、python中一切都是对象、目前在…

记录 使用 git 克隆仓库报错:Warning: Permanently added‘github.com’ to the .....(ssh )

解决方法: 1. 新建空文件夹->右键->点击 Git Bash Here2. 输入 cd C:3. 输入 cat ~/.ssh/id_rsa.pub4. 输入 ssh-keygen重复回车,生成一个矩形,则说明公钥已经生成了。重复步骤3,生成publickey,右键…

docker-ubuntu

docker ps docker images 拉取ubuntu镜像 docker pull ubuntu 启动 docker start podid docker run -itd -e TZAsia/Shanghai --name ubuntu-test -v /share:/shared -d ubuntu:latest 进入bash界面 docker exec -it podid /bin/bash 安装sudo apt-get install sudo …

Vue2基础学习

vue基础学习 Vue基础指令v-show 和 v-ifv-on指令v-bind指令v-bind操作classv-bind 操作stylev-for 指令练习:图书管理案例v-modelv-model原理 指令修饰符v-model指令修饰符click.stop-》阻止冒泡按键修饰符阻止默认行为 计算属性计算属性简写computed计算属性VS方法…

HTML 标签讲解

HTML 标签讲解 HTML 语言结构根元素元数据元素主体根元素大纲元素文本内容语义化内联文本图像与多媒体编辑标识table表格内容表单内容table表单 HTML 语言结构 Markup (标记、标签)用来容纳和描述内容 严格意义上,标签是指开始标签&#xf…

优化爬虫效率:利用HTTP代理进行并发请求

网络爬虫作为一种自动化数据采集工具,广泛应用于数据挖掘、信息监测等领域。然而,随着互联网的发展和网站的增多,单个爬虫往往无法满足大规模数据采集的需求。为了提高爬虫的效率和性能,我们需要寻找优化方法。本文将介绍一种利用…

企业无线局域网部署最佳实践

文章目录 企业无线局域网部署最佳实践引言1. 无线网规划和设计a. 选择合适的频宽b. 网络规划工具c. 考虑物理环境d. 用户密度和需求e. 未来扩展f. 安全性和策略g. 测试和验证2. 无线局域网容量2.1 用户和设备预测2.2 应用流量分析2.3 带宽管理2.4 无线技术选择2.5 网络健康检查…

Java程序中常用的设计模式有哪些和该种设计模式解决的痛点

设计模式是大量程序员智慧的结晶,是优秀的代码范式,是以前那些大佬程序员的编程经验总结,非常值得学习。 在软件开发中,有许多常用的设计模式,每种模式都解决了特定类型的问题。以下是一些常见的设计模式及其简要介绍&…

鳄鱼指标和ADX组合后,发现买卖信号真清晰

通过之前的文章分享,anzo capital昂首资本相信各位投资者对ADX已经有了深刻的理解,今天在后台有小伙伴分享了鳄鱼指标,没想到的是,鳄鱼指标和ADX组合后,买卖信号变的更清晰了,今天就分享一下。 鳄鱼指标是一…

uni-app 之 vue语法

uni-app 之 vue语法 image.png --- v-html 字符 --- image.png <template><view><view>{{title}}</view>--- v-html 字符 ---<view>{{title2}}</view><view v-html"title2"></view><view>{{arr}}</view&g…

API接口接入电商平台案例,采集淘宝天猫拼多多1688京东LAZADA数据按关键字搜索商品示例

按关键字搜索商品数据API接口可以让用户轻松地在海量商品中找到自己需要的商品。这个接口包括多种搜索方式&#xff0c;例如利用关键字搜索商品名称、商品描述、商品分类、商家信息等。同时&#xff0c;还可以通过不同的排序方式进行筛选&#xff0c;例如销量排行、价格排行、评…

垃圾回收 - 标记压缩算法

压缩算法是将标记清除算法与复制算法相结合的产物。 1、什么是标记压缩算法 标记压缩算法是由标记阶段和压缩阶段构成。 首先&#xff0c;这里的标记阶段和标记清除算法时提到的标记阶段完全一样。 接下来我们要搜索数次堆来进行压缩。压缩阶段通过数次搜索堆来重新填充活动对…

51单片机简易时钟闹钟八位数码管显示仿真( proteus仿真+程序+原理图+报告+讲解视频)

51单片机简易时钟闹钟八位数码管显示仿真( proteus仿真程序原理图报告讲解视频&#xff09; 1.主要功能&#xff1a;2.仿真3. 程序代码4. 原理图元器件清单 5. 设计报告6. 设计资料内容清单&&下载链接资料下载链接&#xff08;可点击&#xff09;&#xff1a; 51单片机…

排序算法:堆排序

数组、链表都是一维的数据结构&#xff0c;相对来说比较容易理解&#xff0c;而堆是二维的数据结构&#xff0c;对抽象思维的要求更高&#xff0c;所以许多程序员「谈堆色变」。但堆又是数据结构进阶必经的一步&#xff0c;我们不妨静下心来&#xff0c;将其梳理清楚。 堆&…

【MySQlL学习笔记】(九)内外连接

内外连接 内连接外连接左外连接右外连接 表的连接分为内连和外连 内连接 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选&#xff0c;我们前面学习的查询都是内连接&#xff0c;也是在开发过程中使用的最多的连接查询。 语法&#xff1a; select 字段 from 表…

腾讯云网站备案详细流程_审核时间说明

腾讯云网站备案流程先填写基础信息、主体信息和网站信息&#xff0c;然后提交备案后等待腾讯云初审&#xff0c;初审通过后进行短信核验&#xff0c;最后等待各省管局审核&#xff0c;前面腾讯云初审时间1到2天左右&#xff0c;最长时间是等待管局审核时间&#xff0c;网站备案…