MySQL之 InnoDB逻辑存储结构

InnoDB逻辑存储结构

InnoDB将所有数据都存放在表空间中,表空间又由段(segment)、区(extent)、页(page)组成。InnoDB存储引擎的逻辑存储结构大致如下图。下面我们就一个个来看看。

在这里插入图片描述

页( InnoDB 磁盘管理的最小单位)

页是磁盘与内存交互和数据库IO的最小单位,也是数据库管理空间存储的基本单位

页的组织方式

数据页之间在物理存储空间上不需要连续,只需要通过一个双向链表连接,在聚簇索引中数据页内数据按照主键大小顺序组成单向链表(每一个数据页会为它里面的数据生成一个页目录,避免单向链表的遍历)

页的内部结构

文件头(描述页信息)

  • FIL_PAGE_OFFSET(页号)
  • FIL_PAGE_UNDO_LOG(事务回滚)
  • FILE_PAGE_INDEX(索引页)
  • FILE_PAGE_PRE+NEXT上一页下一页的页号
  • FILE_PAGE_SPACE_OR_CHECKSUM(当前页面校验和)
  • FILE_PAGE_LSN(页面最后被修改对应的日志序列位置)

文件尾(检验页是否完整)

校验和+LSN

页目录(存储用户记录的相对位置 )

方便我们在一个页内不用采用遍历链表的方式找到数据 提高查询效率

在这里插入图片描述

使用页目录,二分查找数据

在这里插入图片描述

页目录分组个数如何确定?
在这里插入图片描述

如何在页目录下快速查找数据

在这里插入图片描述

小结:

在一个数据页中查找指定主键值的记录分为两步:

1.通过二分法确定所在的槽,并找到槽所在分组中主键最小的那个记录

2.通过next_record属性遍历该组的各个记录

页头(页的状态信息)

在这里插入图片描述

最大记录和最小记录

两个虚拟的行记录

User Records(用户记录:存储行记录信息)

按照指定的行格式摆在user record部分,相互形成单链表

Free Space(空闲空间)

我们自己存储的记录会按照指定的行格式存储到User Records中 ,但在一开始并没有User Records这个部分,当我们每插入一条数据就从Free Space申请一个记录大小的空间到User Records部分来存储这条记录,当Free Space的空间被用完后就意味着这个页的空间已经满了,需要申请新的页

行格式

格式:ROW_FORMAT=行格式名称

种类:

COMPACT:

在这里插入图片描述

变长字段长度列表

varchar 类型是变长的,例如 varchar(50),那么这个字段值的长度范围:0 ~ 50 个字符。但是,不是每个字段值都刚好50个字符,肯定会有的长有的短。

那么,数据存储时,会按照字段定义时的最大长度来存储值吗?

必须不会的,如果都按照最大长度存储,当出现值不满 50个字符长度时,会浪费磁盘空间和内存空间。

为什么也浪费内存空间,数据不是存放在磁盘么?大家不会忘了缓冲池的作用了吧?哈哈,要记得缓冲池和磁盘数据交换的单位就是数据页而数据行是存放在数据页中的

InnoDB 中,利用 变长字段长度列表 来解决上面的问题:

  1. 变长字段长度列表记录每一个变长字段值的长度,存储的长度是十六进制的。
  2. 如果有多个变长字段,那么变长字段长度列表是按逆序存储的。

NULL值列表

记录null值是为了不浪费空间,方便辨别为空字段,如果可以为空字段为空则直接跳过

记录头信息

在这里插入图片描述

delete_mask

值为0:该记录还没有删除 值为1:该记录已经删除

被删除的记录为什么还在页中存储呢?

因为立即在磁盘上移除该记录会导致其他记录进行重新排列,导致性能消耗。将不需要的记录打上标记,这些删除记录会组成链表,这些垃圾链表中占用的空间变为可重用空间,之后有记录插入时可以直接覆盖垃圾链表中的记录

记录的真实数据

记录的真实数据除了我们的定义的列的数据外还有三个隐藏列

在这里插入图片描述

  1. DB_ROW_ID 字段:如果我们没有指定主键和unique key唯一索引的时候,他就内部自动加一个ROW_ID作为主键。
  2. DB_TRX_ID 字段:事务 ID,标识这是哪个事务更新的数据
  3. DB_ROLL_PTR 字段:回滚指针,用来进行事务回滚的

行溢出问题

数据页的默认大小是 16kb,但是某些字段的值可以远远大于 16kb。

例如变长字段类型 varchar(N):N 最大可为 65532(65kb),这就远远大于 16kb。

当然了,还有 text 和 blog 字段,这些都是大字段,都可以超过 16kb。

如果一行数据的大小超过了 16kb,就会出现行溢出的现象。

怎么解决?

当一行数据超了 16kb,会在超了大小的那个字段中,可能仅仅包含他的一部分数据,然后同时包含一个20个字节的指针,指向存储了这行数据超了的部分的其他数据页。

DYNAMIC和COMPARESSED

Redundant

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

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

相关文章

WPF实战项目十八(客户端):添加新增、查询、编辑功能

1、ToDoView.xmal添加引用&#xff0c;添加微软的行为类 xmlns:i"http://schemas.microsoft.com/xaml/behaviors" 2、给项目添加行为 <i:Interaction.Triggers><i:EventTrigger EventName"MouseLeftButtonUp"><i:InvokeCommandAction Com…

【漏洞复现】熊海cms 存在sql注入 附poc

漏洞描述 熊海CMS 是由熊海开发的一款可广泛应用于个人博客,个人网站,企业网站的一套网站综合管理系统。 其采用前后端整合设计思路,php,Apache,mysql,前端使用Bootstrap和少许jquery前端框架开发; 网站样式设计简洁大方,整体功能点并不多,但功能正好够用;拥有一个…

【计网 面向连接的传输TCP】 中科大笔记 (十 二)

目录 0 引言1 TCP 的特性1.1 拓展&#xff1a;全双工、单工、半双工通信 2 TCP报文段结构3 TCP如何实现RDT4 TCP 流量控制4.1 题外话&#xff1a;算法感悟 5 TCP连接3次握手、断开连接4次握手5.1 连接5.2 断开连接 6 拥塞控制6.1 拥塞控制原理6.2 TCP拥塞控制 &#x1f64b;‍♂…

Docker容器网络模式

1.none网络 1&#xff09;使用默认网络模式创建一个BusyBox容器&#xff0c;用于对比none网络模式&#xff1b; 测试网络&#xff0c;可以正常连接外网。 2&#xff09;再创建一个none网络模式的BusyBox容器&#xff1b; 测试网络连接&#xff0c;无法连接外网。 总结&#x…

六:Day01_Spring Boot01

一、Spring Boot简介 1. 概念简介 Spring Boot是Spring公司的一个顶级项目&#xff0c;和Spring Framework是一个级别的。 Spring Boot实际上是利用Spring Framework 4 自动配置特性完成。编写项目时不需要编写xml文件。 2. 启动器介绍 Spring Boot的启动器实际上就是一个依赖…

TSINGSEE青犀AI视频智能分析系统的视频接入能力解析

视频智能分析技术是一种先进的人工智能技术&#xff0c;它能够对视频内容进行自动化的分析和理解。这种技术的主要特点包括实时性、自动化、准确性、可解释性等。 1&#xff09;实时性。视频智能分析技术能够在短时间内对大量的视频数据进行快速处理和分析&#xff0c;从而提供…

【网络BSP开发经验】网络流量应用识别技术

文章目录 网络流量应用识别技术背景应用识别基本原理应用识别主流技术方向特征识别技术单报文解析流特征解析 关联识别技术DNS关联识别 行为识别技术 应用识别框架介绍应用特征提取经验tcpdump 抓包方式默认启动监视指定网络接口的数据包监视指定主机的数据包 禁用特征提取加速…

Small Data Transmission (二)具体过程

这篇是SDT相关的具体过程,包括RRC层初始化SDT 的条件,MAC 层初始化SDT过程的判断,CG-SDT的具体过程,TA Validation for CG-SDT, CG-SDT TA 验证的路径损耗参考推导,SDT Uplink Time Alignment,RRC inactive中的CG based PUSCH传输和RA based PUSCH传输,依次看下。 初始…

简历上的工作经历怎么写

通过了简历筛选&#xff0c;后续的面试官会仔细阅读你的简历内容。他们在找什么呢&#xff1f;他们希望搞清楚你在某一段经历中具体干了什么&#xff0c;并且判断你的能力具体达到了什么水平。 简历在线制作下载&#xff1a;百度幻主简历 面试官喜欢具体的经历 越具体&#x…

计算机网络(二)

&#xff08;八&#xff09;客户端软件设计的细节 A、解析协议号 客户端可能会需要通过协议名指定协议&#xff0c;但是Socket接口是用协议号指定的&#xff0c;这时候我们就需要使用getprotobyname()函数实现协议名到协议号的转换&#xff0c;该函数会返回一个指向protoent的…

第三方实验室LIMS管理系统源码,asp.net LIMS源码

LIMS实验室信息管理系统源码 LIMS系统的功能根据实验室的规模和任务而有所不同&#xff0c;其系统主要功能包括:系统维护、基础数据编码管理&#xff0c;样品管理、数据管理、报告管理、报表打印、实验材料管理、设备管理等。它可以取代传统的手工管理模式而给检测实验室带来巨…

基于SSM框架的餐馆点餐系统的设计

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

什么是Anaconda?作用是?使用python必须要安装嘛?

一、什么是Anaconda以及其作用&#xff1f; 通俗来讲&#xff0c;Anaconda算是一个环境容器&#xff0c;也可以叫环境管理器。 作用&#xff1a;可以在Anaconda容器中为python项目创建不同的环境。在各个不同环境中可以安装不同版本的包并且各个环境互不影响。可以在使用不同项…

唯品会年度特卖大会㊙内购清单㊙

唯品会年度特卖大会㊙内购清单㊙ 内部员工亲友专享&#xff0c;实实在在省钱&#xff0c;❌抢完不补! 今晚8点开抢&#xff0c;提前收藏>> https://t.vip.com/Im3KlTnDSJ8 2023年唯品会年度特卖大会热门会场推荐 1.唯品会年度特卖大会 限时加码!瓜分百万津贴!抢海量…

java论坛数据以及搜索接口实现

一. 内容简介 java论坛数据以及搜索接口实现 二. 软件环境 2.1 java 1.8 2.2 mysql Ver 8.0.13 for Win64 on x86_64 (MySQL Community Server - GPL) 2.3 IDEA ULTIMATE 2019.3 2.4d代码地址 三.主要流程 3.1 创建数据库,创建数据表 3.2 开始编写接口&#xff0c;并测…

字节大佬整理测试用例编写规范

目录 1.1目的 1.2使用范围 二 测试用例编写原则 2.1系统性 2.2连贯性 2.3全面性 2.4正确性 2.5符合正常业务惯例 2.6仿真性 2.7容错性&#xff08;健壮性&#xff09; 三 测试用例设计方法 3.1 等价类划分法&#xff1a; 3.2 边界值分析法&#xff1a; 3.3 因果图…

拼多多工作制;奥特曼回归;拼多多市值;雷军回应组装厂;| 每日科技小评

今日科技圈速览 马斯克称人工智能比核弹更危险奥特曼完整备忘录曝光 &#xff1a;未来发展有三大优先事项AI&#xff08;人工智能&#xff09;新锐巨头OpenAI的新董事会或许没有给投资者留下一席之地阿里巴巴市值又反超拼多多&#xff0c;长远来看拼多多和阿里巴巴哪个市值高&…

YOLO改进系列之ParNetAttention注意力机制

ParNet注意力是一种用于自然语言处理任务的注意力机制&#xff0c;它是由谷歌在2019年提出的。ParNet注意力旨在解决传统注意力机制在处理长序列时的效率问题。传统的注意力机制在计算注意力权重时&#xff0c;需要对所有输入序列的位置进行逐一计算&#xff0c;这导致了在长序…

JS中的类型转换

该节会全面介绍强制类型转换的优缺点 1、值类型转换 将值从一种类型转换为另一种类型通常称为类型转换&#xff0c;这是显式的情况&#xff1b;隐式的情况称为强制类型转换 JS中的强制类型转换总是返回标量基本类型值&#xff08;参见第 2 章&#xff09;&#xff0c;如字符…

5 存储器映射和寄存器

文章目录 5.3 芯片内核5.3.1 ICache5.3.2 DCache5.3.3 FlexRAM 5.4 存储器映射5.4.1 存储器功能划分5.4.1.1 存储器 Block0 内部区域功能划分5.4.1.2 储存器 Block1 内部区域功能划分5.4.1.3 储存器 Block2 内部区域功能划分 5.5 寄存器映射5.5.1 GPIO1的输出数据寄存器 5.3 芯…