MySQL—MySQL的NULL值是怎么存放的

news2024/9/24 13:19:42

一、引言

 1、MySQL数据存放在哪个文件?

        创建一个数据库会产生三种格式的文件,分别是.opt格式、.frm格式、.ibd格式。

        opt格式:用来存储当前数据库的默认字符集和字符校验规则。

        frm格式:该文件是用来保存每个表的元数据信息的,主要包含表结构定义。

        ibd格式:存放数据库的数据

2、表空间文件的结构是什么样的?

        表空间由段(segment)、区(extent)、页(page)、行(row)组成

        行:数据库表的记录都是按行进行存放的,每行记录根据不同行格式,有不同的存储结构。

        页:InnoDB 的数据是按「页」为单位来读写的,每页大小默认16k

        区:在表中数据量大的时候,为某个索引分配空间的时候就不再按照页为单位分配了,而是按照区为单位分配。每个区的大小为 1MB,对于 16KB 的页来说,连续的 64 个页会被划为一个区,这样就使得链表中相邻的页的物理位置也相邻,就能使用顺序 I/O 了。

        段:表空间是由各个段组成的,段是由多个区组成的。可分为数据段、索引段和回滚段等。

 

二、innodb的compact行格式 

        innodb的compact的行格式,如下所示

         可以看到行格式可以分为记录的额外信息和记录的真实数据,记录的真实数据就不再赘述了,就是记录真实的存放的数据,但是还存放三个隐藏列:row_id, trx_id, roll_pointer!

        记录的额外信息分为:记录头信息、NULL值列表、变长字段长度列表

        记录头信息:里面有delete_mask(标记是否被删除)、next_record(标记下一条记录的位置)、record_type(表示当前记录类型)。

        NULL列表:如果存在允许 NULL 值的列,则每个列对应一个二进制位,二进制位按照列的顺序逆序排列。如果NULL值列大于8个,就需要两个字节存储

        变长字段长度列表:在存储数据的时候,也要把数据占用的大小存起来,存到变长字段长度列表里面,读取数据的时候才能根据它去读取对应长度的数据。其他 TEXT、BLOB 等变长字段也是这么实现的。

三、行溢出后,MySQL是怎么处理的

        MySQL 中磁盘和内存交互的基本单位是页,一个页的大小一般是 16KB,也就是 16384字节,而一个 varchar(n) 类型的列最多可以存储 65532字节,一些大对象如 TEXT、BLOB 可能存储更多的数据,这时一个页可能就存不了一条记录。这个时候就会发生行溢出,多的数据就会存到另外的溢出页中。 然后会在行中用20个字节来存储溢出页的地址!

四、一些问题的回答 

MySQL 的 NULL 值是怎么存放的?

MySQL 的 Compact 行格式中会用NULL值列表来标记值为 NULL 的列,NULL 值并不会存储在行格式中的真实数据部分。NULL值列表会占用 1 字节空间,当表中所有字段都定义成 NOT NULL,行格式中就不会有 NULL值列表,这样可节省 1 字节的空间。

MySQL 怎么知道 varchar(n) 实际占用数据的大小?

MySQL的compact格式会有一个变长字段列表进行存储实际占用数据的大小

varchar(n) 中 n 最大取值为多少?

最大取值为65535-NULL值列表占用字节数-变长字段长度列表所占字节数

行溢出后,MySQL 是怎么处理的?

Compact 行格式针对行溢出的处理是这样的:当发生行溢出时,在记录的真实数据处只会保存该列的一部分数据,而把剩余的数据放在溢出页中,然后真实数据处用 20 字节存储指向溢出页的地址,从而可以找到剩余数据所在的页。

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

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

相关文章

骨传导耳机哪个牌子好?这几款热门骨传导耳机款式不要错过

我是一名耳机的重度使用者,每天上下班的路上都会使用耳机来听音乐,以前使用有线耳机多一些,后来无线耳机出现,我就开始使用无线耳机。无线耳机有很多种,挂颈式、真无线、骨传导、气传导等各种耳机都有用过,…

nodejs+vue养老院管理系统 u1yrv

本智慧养老中心管理系统是为了提高用户查阅信息的效率和管理人员管理信息的工作效率,可以快速存储大量数据,还有信息检索功能,这大大的满足了老人信息和管理员这两者的需求。操作简单易懂,合理分析各个模块的功能,尽可…

无涯教程-进程 - 内存映射

mmap()系统调用提供了将文件或设备映射到内存的调用进程的虚拟地址空间中的映射。这有两种类型- 文件映射 - 此映射将进程的虚拟内存区域映射到文件,这意味着读取或写入那些内存区域会导致文件被读取或写入,这是默认的映射类型。 匿名映射 - 此映射…

AI新时代,英特尔如何加强产学研融合?

人工智能作为当前数字经济发展的核心驱动力,我们在关注AI技术发展之际,为发挥AI强大助力,更需进一步思考AI的科研、产业应用与人才培育的工作,推动产学研融合创新。 正如英特尔公司高级副总裁、英特尔中国区董事长王锐在刚结束的…

[Linux]命令行参数和进程优先级

[Linux]命令行参数和进程优先级 文章目录 [Linux]命令行参数和进程优先级命令行参数命令行参数的概念命令函参数的接收编写代码验证 进程优先级进程优先级的概念PRI and NI使用top指令修改nice值 命令行参数 命令行参数的概念 命令行参数是指用于运行程序时在命令行输入的参数…

论文阅读:Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks

前言 要弄清MAML怎么做,为什么这么做,就要看懂这两张图。先说MAML**在做什么?**它是打着Mate-Learing的旗号干的是few-shot multi-task Learning的事情。具体而言就是想训练一个模型能够使用很少的新样本,快速适应新的任务。 定…

windows下MSYS、MinGW编译环境使用网络API时报错:undefined reference to `inet_pton‘解决办法

windows下MSYS、MinGW编译环境使用网络API时报错:undefined reference to inet_pton’解决办法 mingw-gcc环境使用网络需要加上库 -lws2_32。 如果是使用的是Qt Creator那么需要在.pro文件中加入一行:win32:LIBS -lws2_32。 当在项目中使用inet_pton、…

Vue2向Vue3过度Vuex状态管理工具快速入门

目录 1 Vuex概述1.是什么2.使用场景3.优势4.注意: 2 需求: 多组件共享数据1.创建项目2.创建三个组件, 目录如下3.源代码如下 3 vuex 的使用 - 创建仓库1.安装 vuex2.新建 store/index.js 专门存放 vuex3.创建仓库 store/index.js4 在 main.js 中导入挂载到 Vue 实例…

在为水质担忧吗?——水质检测大屏展示系统启动(inscode直观运行)

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 「推荐专栏」: ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄,vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…

哪款运动耳机好用、舒服的运动耳机推荐

如今,运动耳机已成为备受热捧的运动潮流单品,消费者对耳机的需求非常多元化。一款出色的运动耳机不仅要满足基本的运动需求,还需要具备丰富的功能,这直接决定了耳机的附加价值。接下来,我将向大家推荐5款佩戴舒适、牢固…

Arduino驱动四位0.36英寸共阴数码管模块

目录 一、简介二、参数性能三、电路原理图四、使用方法 一、简介 点击图片购买 四位0.36英寸共阴数码管模块由一个12引脚的0.36英寸红色共阴数码管和一个TM1650驱动芯片构成,大大减少了驱动引脚与连线,只需要四根引线IIC即可控制数码管的显示。TM11650是…

C语言之三子棋游戏实现篇

目录 主函数test.c 菜单函数 选择实现 游戏函数 (函数调用) 打印棋盘数据 打印展示棋盘 玩家下棋 电脑下棋 判断输赢 循环 test.c总代码 头文件&函数声明game.h 头文件的包含 游戏符号声明 游戏函数声明 game.h总代码 游戏函数ga…

贝叶斯公式中的动词 命名技巧

一项血液化验有95%的把我诊断某种疾病,但是,这项化验用于健康人也会有1%的“伪阳性”结果(即如果一个健康人接受这项化验,则化验结果乌镇此人患有该疾病的概率是0.01)。如果该疾病的患者事实上只占总人口的0.5%,若某人化验结果为阳…

xfs ext4 结合lvm 扩容、缩容 —— 筑梦之路

ext4 文件系统扩容、缩容操作 扩容系统根分区 根文件系统在 /dev/VolGroup/lv_root 逻辑卷上,文件系统类型为ext4,大小为10G,现在要将其扩容成20G。 给空闲空间分区# 调整分区类型为LVM,也就是8e类型 fdisk /dev/sdb# 选定分区后使…

JVM 之字节码(.class)文件

本文中的内容参考B站尚硅谷宋红康JVM全套教程 你将获得: 1、掌握字节码文件的结构 2、掌握Java源代码如何在JVM中执行 3、掌握一些虚拟机指令 4、回答一些面试题 课程介绍 通过几个面试题初始字节码文件为什么学习class字节码文件什么是class字节码文件分析c…

【Spring MVC】

目录 🍮1 什么是 MVC ? 🎁2 Spring MVC 的连接 🍘2.1 RequestMapping 实现 POST 和 GET 请求 🥣2.2 GetMapping 只支持 GET 请求 🫖2.3 PostMapping 只支持 POST 请求 🍬3 Spring MVC 获取参数的…

开始MySQL之路——外键关联和多表联合查询详细概述

多表查询和外键关联 实际开发中,一个项目通常需要很多张表才能完成。例如,一个商城项目就需要分类表,商品表,订单表等多张表。且这些表的数据之间存在一定的关系,接下来我们将在单表的基础上,一起学习多表…

第四方支付平台和聚合支付有什么区别?

第四方支付平台和聚合支付有什么区别? 聚合支付和第四方支付平台是移动支付领域的两种常见支付方式。它们在实际应用中有许多相似之处,给人们的生活带来了便利。然而,这两种支付方式也有本质的区别。我将从不同的角度对它们进行比较和分析。 …

找风景类视频素材就上这5个网站

免费高清的风景视频素材,我推荐你去这几个网站下载,赶紧收藏起来~ 菜鸟图库 https://www.sucai999.com/video.html?vNTYxMjky 菜鸟图库网素材非常丰富,网站主要还是以设计类素材为主,高清视频素材也很多,像风景、植…

回归预测 | MATLAB实现TSO-ELM金枪鱼群优化算法优化极限学习机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现TSO-ELM金枪鱼群优化算法优化极限学习机多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现TSO-ELM金枪鱼群优化算法优化极限学习机多输入单输出回归预测(多指标,多图)效…