mysql底层是如何存放数据的

总览

首先总的来说,分为四个层级,行页区段。行就是数据库里的一行数据。
但一次从磁盘读进内存的数据量是一页(页是读写的单位,默认16KB一页),页分很多种类,例如数据页、溢出页、undo日志页。
而我们知道B+树的叶子节点是逻辑上连续的,假设物理上不连续,那随机io的开销还是很大的,所以把不同页整合到一起还是有必要的,这就是区,假设每个区1MB,那对16KB的页,最多连续64个页能存进连续的一段空间,加速了范围访问。
段分为数据段、索引段、回滚段。数据段就是叶子节点的所有区,索引段就是非叶子节点的所有区,回滚段存放的是回滚数据。
在这里插入图片描述

行数据

在这里插入图片描述

变长字段长度列表(若没有varchar,则该字段是不存在于行中的)

存储varchar类型的当前数据长度,例如下图
在这里插入图片描述
假设字符集时ascii(一个字符一个字节),则第一条记录,name占用一个字节,即0x01,phone占用三个字节,即0x03,在变长字段长度列表中,要按照倒序(千万要注意!不是按照字节大小,是按照列的顺序的倒叙即列n、列n-1…列1),如下图
在这里插入图片描述
同理,第二条第三条数据(NULL值不会被存到“记录的真实数据”,所以也不用在变长字段长度列表里存储)
在这里插入图片描述
那么为啥要倒着存储字段的长度呢?
答案是,为了尽可能一次读取数据时,让真实数据和长度被读进一个cache line里,提高命中率
在这里插入图片描述

NULL值列表(设定了NOT NULL则也不存在于行中)

分配整数个字节,然后一个字节可以表示8个列的是否为NULL的情况(不足8个也要分配一个字节,超过则两个字节),同样
对于第一条数据,没有NULL值,则全是0
在这里插入图片描述
第二条数据age是NULL
在这里插入图片描述
第三条数据age和phone是NULL
在这里插入图片描述
总体来看,目前状况是这样的:
在这里插入图片描述

记录头信息
  • delete_mask,是1代表本行被删除,也就是说删除数据不是真删了,只是赋值了标志位罢了
  • next_record,指向了下一条记录(指向位置是记录的额外信息和记录的真实数据中间,往左往右就可以访问二者,高效
  • record_type,表示当前行的类型,0代表普通记录、1代表非叶子节点、2代表最小记录、3代表最大记录
记录的真实数据

这是三个隐藏列,是MySQL自动为每个记录添加的

  • row_id,假设建立表的时候没有主键或者唯一约束列,就会有这个隐藏列,否则就没有。占6字节
  • trx_id,事务id,代表数据由哪些事务产生,是必须的。占6字节
  • roll_pointer,记录上一个版本的指针,是必须的。占7字节

varchar(n)最大取值?

MySQL约束的一行记录最多65535(TEXT、BLOB这种大对象类型除外),这既包括额外信息,还包括真实数据,但不包括记录头信息和隐藏列。那来算一下把。

  • 假设只有一个列,并且这个列是varchar。如果设定可以为NULL则要-1,否则不考虑NULL值列表。变长字段长度列表分两种情况:1、最大长度低于256( 2 8 2^8 28),则分配一字节记录2、大于256,则分配两字节( 2 1 6 = 65536 2^16=65536 216=65536)记录。很显然本例子是第二种情况,因此65535-1-2=65532字节。那么对于ascii的字符集,n=65532,utf8则是n=65532/3
  • 假设两列,和上述一样,看下图
    在这里插入图片描述
行溢出的处理

通常默认一个页16KB,16*1024=16384个字节,少于65532,造成了可能一个页都放不下一行
对于Compact行格式,会把溢出部分存到溢出页:
在这里插入图片描述
对于compressed、dynamic行格式,记录真实数据的地方只会存放指针了,数据全部存到溢出页
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenAI宫斗,尘埃落定,微软成最大赢家

周末被OpenAI董事会闹剧刷屏,ChatGPT之父Sam Altman前一天被踢出董事会,免职CEO,后一天重返OpenAI,目前结局未知。 很多同学想要围观,缺少背景知识,这里老章为大家简单介绍前因后果及涉及的人物,时间线,让大家轻松围观。 备好瓜子,开始。 1、主角 先看一张图,看一…

Java基于B/S架构,包括PC后台管理端、APP移动端、可视化数据大屏的智慧工地源码

智慧工地管理平台充分运用数字化技术,聚焦施工现场岗位一线,依托物联网、互联网、AI等技术,围绕施工现场管理的人、机、料、法、环五大维度,以及施工过程管理的进度、质量、安全三大体系为基础应用,实现全面高效的工程…

无人售货奶柜:颠覆传统零售行业的潜力黑马

无人售货奶柜:颠覆传统零售行业的潜力黑马 无人售货奶柜具备体积小、灵活运用空间、无需人工看守和自动结算等特点。相较于传统建店方式,它的成本大大降低,从而提高了运营效率。此外,无人售货奶柜独特的优势之一就是可以保持24小时…

【GUI】-- 11 贪吃蛇小游戏之绘制静态的小蛇

GUI编程 04 贪吃蛇小游戏 4.2 第二步:绘制静态的小蛇 现在绘制静态的小蛇(即小蛇初始位置),并且完善游戏默认初始状态。这一步还在GamePanel类中实现。 首先,定义了小蛇的数据结构, //定义蛇的数据结构int length; //小蛇总长…

LeetCode【45】跳跃游戏2

题目: 思路: 注意和跳跃游戏【55】不同的是,题目保证可以跳到nums[n-1];那么每次跳到最大即可 代码: public class LeetCode45 {public static int jump(int[] nums) {int jumps 0;int currentEnd 0;int farthest 0;for(int…

案例研究|北京交通大学基于DataEase开展多场景校园数据分析与展示

北京交通大学是教育部直属,教育部、交通运输部、北京市人民政府和中国国家铁路集团有限公司共建的全国重点大学,是国家“211工程”“985工程优势学科创新平台”“双一流”建设高校。 多年来,北京交通大学积极发挥信息技术赋能学校人才培养、…

STM32 -Bin/Hex文件格式解析

文章目录 1. 概述2. Hex文件2.1 格式解析2.2 数据类型2.3 举例解析2.4 合并两个Hex文件方法 3 总结(未完待续) 1. 概述 Hex文件:它是单片机和嵌入式工程编译输出的一种常见的目标文件格式(比如keil就能编译输出hex文件&#xff0…

Rockchip Clock

一:概述 1、时钟子系统 本章节所指的时钟是给SOC各个组件提供时钟的树状框架,而非内核使用的时钟。和其他模块一样,CLOCK也有框架,用以适配不同的平台。适配层之上是客户代码和接口,也就是各模块(如需要时钟信号的外设)的驱动。适配层之下是具体的SOC的时钟操作细节。…

Rust错误处理机制:优雅地管理错误

大家好!我是lincyang。 今天,我们要探讨的是Rust语言中的错误处理机制。 Rust作为一种系统编程语言,对错误处理的重视程度是非常高的。它提供了一套既安全又灵活的机制来处理可能出现的错误。 Rust错误处理的两大类别 在Rust中&#xff0…

Flutter:多线程Isolate的简单使用

在flutter中如果要使用线程,需要借助Isolate来实现。 简介 在Flutter中,Isolate是一种轻量级的线程解决方案,用于在应用程序中执行并发任务。Isolate可以被认为是独立于主线程的工作单元,它们可以在后台执行任务而不会阻塞应用程…

影像仪自行更换RGB光源,“看得清,测得准”!

影像仪作为一种现代化高精度测量设备,在各行各业都有着广泛的应用。而RGB表光作为影像仪中的一个关键技术,也是实现图像真实还原的重要因素之一。 **什么是RGB表光?**RGB是指红(Red)、绿(Green)…

vue动态获取目录结构进行配置静态路由

文章目录 前言定义项目页面格式一、vite 配置动态路由新建 /router/utils.ts引入 /router/utils.ts 二、webpack 配置动态路由总结如有启发,可点赞收藏哟~ 前言 项目中动态配置路由可以减少路由配置时间,并可减少配置路由出现的一些奇奇怪怪的问题 路由…

Postman的各种参数你都用对了吗?

大家好,我是G探险者。 Postman我们都不陌生,作为一个广泛使用的 HTTP 客户端,平时我们使用它来测试接口,无非就是把接口的url放进去,然后根据请求类型get或者post,在不同位置传一下参数,除了常见的 Params…

机器学习第11天:降维

文章目录 机器学习专栏 主要思想 主流方法 投影 二维投射到一维 三维投射到二维 流形学习 PCA主成分分析 介绍 代码 内核PCA 具体代码 LLE 结语 机器学习专栏 机器学习_Nowl的博客-CSDN博客 主要思想 介绍:当一个任务有很多特征时,我们…

Foodpanda API连接的艺术:无代码开发如何集成营销系统和广告推广工具

连接Foodpanda和电商平台的无代码开发 Foodpanda不仅是一家提供快速外卖服务的国际品牌,而且其创新的技术解决方案还能帮助电商企业优化系统运营。通过无代码开发的方法,即使没有专业的API开发知识,商家也能实现高效的电商系统和客服系统连接…

第3关:图的广度遍历

500 任务要求参考答案评论2 任务描述相关知识编程要求测试说明 任务描述 本关任务:以邻接表存储图,要求编写程序实现图的广度优先遍历。 相关知识 广度优先遍历类似于树的按层次遍历的过程。 假设从图中某顶点v出发,在访问了v之后依次访…

区块链技术与应用 【全国职业院校技能大赛国赛题目解析】第五套智能合约安全漏洞测试

第五套题的智能合约安全漏洞测试题目 环境 : ubuntu20 Truffle v5.8.3 (core: 5.8.3) Ganache v7.8.0 Solidity v0.8.3 Node v18.16.0 Web3.js v1.8.2 前言 请在测试的时候开启ganache打开,并且在truffle的配置文件配好ganache,之前两个帖子忘说了/(ㄒoㄒ)/~~ truffle-con…

hisi芯片常见专有名词总结SVP MPP NNIE ACL

1.SVP: Smart Vision Platform是海思媒体处理芯片智能视觉异构加速平台。该平台包含了 CPU、DSP、NNIE(Neural Network Inference Engine)等多个硬件处理单元和运行在这些 硬件上 SDK 开发环境,以及配套的工具链开发环境。 不同芯片下的 SVP 硬件资源…

echarts 实现3D立体柱状图示例

该示例有如下几个特点: ①实现tooltip自定义样式(echarts 实现tooltip提示框样式自定义-CSDN博客) ②数据为0时,顶部四边形不展示 ③legend图标设置为自定义图片 【第②也是一个难点,我没有找到其他解决办法&#xff…