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

news2024/12/29 9:00:13

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.coloradmin.cn/o/974112.html

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

相关文章

了解下iVX,它可能会刷新你对传统软件开发的认知!

知识目录 前言一、聊聊传统编程语言二、iVX的诞生三、iVX VS 传统编程语言3.1 图形化 vs 文本化3.2 逻辑与语法的解耦3.3 组件与库3.4 编译与代码生成3.5 IDE与语言设计的整合3.6 面向群体3.7 灵活性与便利性 四、iVX提供多样模板,快来 ~五、iVX VS 其他低代码平台结…

面试中的自我介绍:首印象决定一切

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

MES系统来料检验:优化制造业质量控制

一、MES系统来料检验的定义: MES系统来料检验是指制造执行系统中的质量管理模块,用于对供应商提供的原材料和零部件进行质量检查和验证。该模块涵盖了来料质量数据的采集、分析、报告和追溯等功能,以确保来料符合质量要求,并提供…

【web知识清单】你想要的都有:网络、HTTP、会话保持、认证授权......持续更新中

作者简介: 目录 1.网络 2.HTTP 2.1.报文结构 2.1.1.请求报文 2.1.2.响应报文 2.2.方法 2.3.HTTPS 2.4.跨域 3.会话保持 3.1.概述 3.2.cookie 3.3.session 4.认证授权 4.1.Token 4.2.JWT 4.3.oauth 1.网络 计算机网络: 计算机网络&…

Lesson4-1:OpenCV图像特征提取与描述---角点特征

学习目标 理解图像的特征知道图像的角点 1 图像的特征 大多数人都玩过拼图游戏。首先拿到完整图像的碎片,然后把这些碎片以正确的方式排列起来从而重建这幅图像。如果把拼图游戏的原理写成计算机程序,那计算机就也会玩拼图游戏了。 在拼图时&#xff…

Problem: 205. 同构字符串;力扣;python

题目描述 代码展示 # class Solution: # def isIsomorphic(self, s: str, t: str) -> bool: # dict {} # flag 0 # for i in range(len(s)): # #记录,s # if s[i] not in dict.keys(): # …

【真题解析】系统集成项目管理工程师 2023 年上半年真题卷(综合知识)

本文为系统集成项目管理工程师考试(软考) 2023 年上半年真题(全国卷),包含答案与详细解析。考试共分为两科,成绩均 ≥45 即可通过考试: 综合知识(选择题 75 道,75分)案例分析(问答题 4 道,75分)综合知识(选择题*75)1-10 题11-20 题21-30 题31-40 题41-50 题51-60 …

让GPT成为您的科研加速器丨GPT引领前沿与应用突破之GPT4科研实践技术与AI绘图

GPT对于每个科研人员已经成为不可或缺的辅助工具,不同的研究领域和项目具有不同的需求。如在科研编程、绘图领域:1、编程建议和示例代码:无论你使用的编程语言是Python、R、MATLAB还是其他语言,都可以为你提供相关的代码示例。​2、数据可视化…

vs code调试rust乱码问题解决方案

在terminal中 用chcp 65001 修改一下字符集,就行了。有的博主推荐 修改 区域中的设置,这会引来很大的问题。千万不要修改如下设置:

宁德时代龙头,比亚迪榜眼:1-7 月全球电动汽车电池市场份额公布

根据SNE Search公布的数据显示,今年1-7月全球电动汽车电池的消费总量为362.9 千兆瓦时(GWh),比去年同期的243.2 千兆瓦时(GWh)增长了49.2%。这表明电动汽车市场的增长势头依然强劲。 在这些数据中&#xff…

QuantLib学习笔记——InterestRate的应用

⭐️ 单利还是复利 巴菲特老爷子有句名言:“人生就像滚雪球,重要的是发现很湿的雪和很长的坡。” 很湿的雪,指的就是复利。很长的坡,指的就是时间。很湿的雪和很长的坡组合起来,就能滚成巨大的雪球。 哈哈&#xff0…

南京市玄武区委常委、组织部部长任宁一行率企业家研修班莅临麒麟信安调研交流

为学习在先进科学技术、人才引育等方面的领先经验,进一步加强交流合作,9月4日上午,南京市玄武区委常委、组织部部长任宁,玄武区委组织部副部长、两新工委书记鲁琳,玄武区委组织部人才综合服务科科长韩静玮等领导一行带…

Apache NIFI将Json数据转为SQL语句并插入到数据库表中

说明 本文中的NIFI是使用docker进行安装的,所有的配置参考:docker安装Apache NIFI 需求背景 现在有一个文件,里面存储的是一些json格式的数据,要求将文件中的数据存入数据库表中,以下是一些模拟的数据和对应的数据库…

Linux_VMware_虚拟机磁盘扩容

来源文章 :VMware教学-虚拟机扩容篇_vmware虚拟机扩容_系统免驱动的博客-CSDN博客 由于项目逐步的完善,需要搭建的中间件,软件越来越多,导致以前虚拟机配置20G的内存不够用了,又不想重新创建新的虚拟机,退…

数据脱敏sensitive(前端或数据库加密,解密)

可以对数据加密,解密,对数据库加密的数据进行解密显示,对数据库没有加密的数据进行加密处理展示前端等待 1:引入数据如下结构 1-1:SensitiveDecode脱敏解密注解 package com.example.poi.desensitization.annotation;…

【python基础知识】3.input()函数

文章目录 前言input()函数input()函数的使用input()函数结果的赋值input()函数的数据类型input()函数结果的强制转换input()函数知识点总结 综合复习 前言 在前面的学习中,我们学会了用print()函数对计算机下简单的命令,开始接触Python里不同类型的数据…

props和$emit

<template> <div class"son" style"border: 3px solid #000; margin: 10px"> 我是Son组件 {{ title }} <button click"changeFn">修改title</button> </div> </template> <script> expo…

电脑显示器无信号?这样做!(问题已解决)

“真的很奇怪哎&#xff0c;我的电脑显示器居然无信号。用着用着电脑就黑了&#xff0c;为什么会出现这种情况呢&#xff1f;请大佬为我解答&#xff01;” 有些朋友可能会发现&#xff0c;当我们打开电脑时&#xff0c;电脑显示器却显示“无信号”。这是为什么呢&#xff1f;电…

Elsaticsearch倒排索引

搜索引擎应该具有什么要求&#xff1f; 查询快 高效的压缩算法 快速的编码和解码速度 结果准确 BM25 TF-IDF 检索结果丰富 召回率 面向海量数据&#xff0c;如何达到搜索引擎级别的查询效率&#xff1f; 索引 帮助快速检索以数据结构为载体以文件形式落地 倒排…

【Flutter】Flutter 使用 qr_flutter 实现QR码二维码生成与渲染

【Flutter】Flutter 使用 qr_flutter 实现QR码二维码生成与渲染 文章目录 一、前言二、qr_flutter 包简介三、安装与配置四、基本使用五、高级功能与自定义六、完整实际业务代码示例七、总结 一、前言 亲爱的 Flutter 初学者&#xff0c;你好&#xff01;今天我要与你分享一个…