第16章:InnoDB数据存储结构

一、数据库的存储结构:页

1.磁盘与内存的交互基本单位:页

InnoDB将表中数据划分多个页来存储,InnoDB中页的大小默认是16KB

在数据库中,不论读一行,还是读多行,都是将这些行所在的页从磁盘加载到内存。数据库管理存储空间的单位是页,数据库I/O操作的最小单位是页。一个页可以存储多个行记录。数据库的读取是以为单位。

 2.页结构概述

页a,页b,页c这些页是双向链表连接,逻辑上是连续的。每个数据页根据页中记录按照主键值从小到大顺序组成单链表,每个数据页会为记录生成页目录,在通过主键查找记录的时候在页目录使用二分法快速定位对应的槽,然后遍历该槽对应分组的记录

3.页的大小

在MySQL数据库中,页的大小是16KB

mysql> show variables like '%innodb_page_size%';

4.页的上层结构

 

①区:页的上层结构是区,一个区分配64个连续的页。64*16=1024KB=1M

②段:有一个或多个区组成。段是数据库中的分配单位,不同类型的数据库对象以不同的段形式存在。

③表空间:是一个逻辑容器,表空间存储的对象是段,在一个表空间中可以有一个或多个段,但是一个段只能属于一个表空间。数据库由一个或多个表空间组成,表空间从管理上可以划分为系统表空间、用户表空间、撤销表空间、临时表空间等。

二、页的内部结构

1.页的概念

页按照类型划分,常见是数据页(B+树)系统页Undo事务数据页

数据页的16kb的存储空间的划分:

 各部分的作用:

 2.第1部分:文件头和文件尾

①文件头作用

描述各种页的通用信息,比如页的编号,上一页,下一页

②文件头的结构

FIL_PAGE_OFFSET

存放页号的

FIL_PAGE_TYPE

当前页的类型

FIL_PAGE_PREV和FIL_PAGE_NEXT

上一页的页号,下一页的页号

FIL_PAGE_SPACE_OR_CHKSUM

代表校验和

为了检测修改后的页是否完整(断电了,可能页不完整)。每当一个页在内存中修改,同步之前就把它的校验和计算出来。开始先写入文件头的校验和,当完全写完了,最后会写入文件尾的校验和。比较文件头和文件尾的校验和,如果两个相等,那么同步成功。不相等说明同步中间出错(有记录,继续刷盘。没有记录,回滚)。校验方式就是采用Hash 算法进行校验。

FIL_PAGE_LSN

页面修改时的日志文件。

③文件尾的结构

校验和+LSN页面修改时的日志文件

3.第2部分:空闲空间,用户记录,最大最小记录

空闲空间

每当插入一条记录,都会从空闲空间部分申请一个空间存储用户记录。当空闲空间没有了,意味着页满了,新记录的插入需要新的页了。

用户记录

将用户数据按照指定的行格式一条一条存储在用户记录部分,相互之间是单链表。记录头信息

用户记录的单链表的形成:(记录头信息)Compact

①创建表

 

 ②表中记录的行格式

 ③记录头信息的属性

 ④插入数据

'

 图示

 

⑤记录头信息属性讲解

delete_mash:0代表没删除,1代表删除。删除的信息实际上还在磁盘,只是打上一个删除标记。因为移除需要重新排列,导致性能下降。但是新插入的记录可以占用此空间。

min_rec_mask:非叶子节点(目录项的页)最小的主键值记录是1。

record_type:0是用户记录,1是目录项记录,2最小记录,3最大记录

heap_no:当前记录本页的位置。heap_no是0最小记录的,heap_no是1最大记录。所以从2开始

n_owned:页目录每个组多少条记录

next_record:指向的下一条记录,单链表(真实记录的地址偏移量)第一条记录的next_record值为32,意味着从第一条记录的真实数据的地址处向后找32个字节便是下一条记录的真实数据

最小最大记录

比较的主键的大小,这两条记录不是我们自己定义的记录

 

4.第3部分:页目录,页面头部

页目录

①为什么需要页目录?

在页中,记录是单链表存储的,单链表的特点是插入,删除效率高。但是查找效率低,最差的情况是遍历链表所有的节点才能完成查找。所以,在页中设计了页目录(存储主键的数组),专门给记录做了一个目录,二分查找进行查找,提高效率。

②根据主键值查找页中的某条记录,如何实现快速查找?

通过页目录查找(页目录存放的是把记录分好组的最大主键值,分组为了减少存储空间)

实现:先把记录(删除的除外)分好组,第1组是最小记录分组,最后一组是最大记录分组,中间其余的组4-8条记录。组中最后一个记录头信息n_owned记录组中的多少条记录。页目录存储的是每组最后一条记录的地址偏移量,存放到slot槽中。

也就是:通过二分法定位记录所在的槽,找到槽所在分组主键最小的那条记录。

通过记录的next_record属性遍历该槽所在组的各个记录。

页头PageHeader

记录数据页存储记录的状态信息:本页存储了多少记录,多少个槽。

5.从数据页角度看B+树如何查询?

B+树按照节点类型:

叶子节点,B+树最底层节点,节点高度0,存储行记录

非叶子节点:存储索引和页面指针

 

问题1:树是如何进行数据检索的?

先从B+树的根开始,逐层检索。直到找到叶子节点,把对应的数据页加载到内存,通过对页目录进行二分查找记录所在的组,然后在分组中通过链表遍历方式查找记录。

问题2:普通索引和唯一索引有什么不同

普通索引和唯一索引在检索效率上基本没有区别。唯一索引是关键字没有重复的,找到了关键字就停止检索。普通索引的关键字可以重复,但是读取一条记录当把这个记录所在的页加载到内存,一个页存在上千条记录,普通索引多判断下一条记录的操作。普通索引和唯一索引在检索效率上基本没有区别。

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

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

相关文章

3dmax入门 | 学3d建模必备软件技能基础教学

3dmax入门❗️学3d建模必备软件技能基础认知|||学3d建模基本都是从3dmax入手开始学习的 这篇笔记就来教零基础小白小伙伴们来认识3dmax 3ds max界面组成有以下几部分: 1、标题栏:主要记录版本信息 2、菜单栏:涵盖了几乎软件所有命令 3、工具栏&#xff…

报表生成器FastReport .Net教程:“Text“对象、文本编辑

FastReport .Net是一款全功能的Windows Forms、ASP.NET和MVC报表分析解决方案,使用FastReport .NET可以创建独立于应用程序的.NET报表,同时FastReport .Net支持中文、英语等14种语言,可以让你的产品保证真正的国际性。 FastReport.NET官方版…

【Web服务应用】Tomcat部署

Tomcat部署 一、Tomcat简介二、tomcat组件2.1核心组件2.2Tomcat功能组件2.3Tomcat 请求过程 三、部署Tomcat服务3.1Tomcat虚拟主机配置 四、Tomcat多实例部署 一、Tomcat简介 一款 java 开发的开源的 Web 应用服务程序。 可以作为Web应用服务器,处理静态的Web页面&…

【计算机组成】Cache与CPU的直接映射、全相联映射与组相联映射

一.Cache与CPU需要映射的原因 CPU准备访问内存时,会先问问cache存储器有没有已经提前准备好了数据,如果没有则再找内存要: 如果Cache刚好命中,则直接从Cache中读取数据: 如果Cache没有命中(Cache失效&#…

计算机中丢失VCRUNTIME140_1怎么办,vcruntime140_1.dll的三个修复方法

vcruntime140_1.dll是一个Windows系统文件,它是Microsoft Visual C Redistributable for Visual Studio 2019软件包的一部分,用于运行使用Visual C开发的应用程序。在我们打开软件或者游戏的时候,提示计算机中丢失VCRUNTIME140_1怎么办&#…

w ndows10玩游戏蓝屏,Windows 10 电脑玩穿越火线蓝屏原因及解决方法

Windows 10 蓝屏是非常常见的,可是面对不同原因出现的蓝屏您又知道如何去处理吗?今天我们就来通过解决穿越火线蓝屏顺便一起看看都是因为什么原因导致的 Windows 10 系统蓝屏吧。 1、显卡驱动导致的蓝屏,由于在 Windows 10 系统中有很多不稳定…

如何下载安装穿越派V3.14版本?

1、启动服务 1.1 在首页或huluer.com任何页面,点击 (数据方舟)。 1.2 点击 启动服务 按钮。 2、安装部署云化环境 (注:一定要到需要部署的个人电脑或服务器上下载并安装。) 2.1 点击确定,下载iChainPi.exe安装程序。(下载及解答 下方点击软件下载也是一样的。)

cf四大服务器位置,CF:从最初的42个服务器到现在的四大战区,穿越火线还能火多久?...

原标题:CF:从最初的42个服务器到现在的四大战区,穿越火线还能火多久? 穿越火线于近日进行了一波重大的更新,最引人注目的就是“跨区作战”了,也就是我们所说的合区,从2017年开始,穿越…

cf游戏进不去计算机,cf更新之后进不去 穿越火线进不去解决方法

很多穿越玩家在游戏更新后会发现游戏在安全检查过后就没了动静,原本应该出现的游戏界面也是迟迟不出现,万般无奈之下选择重启客户端,然而情况依旧如此。下边小编带您一起来看看为什么cf更新之后进不去,穿越火线进不去解决方法。 1…

echarts折线图使用记录

1项目中引入echarts文档api介绍,链接地址如下 https://echarts.apache.org/handbook/zh/basics/import 2 官网基础样例介绍,链接地址如下 https://echarts.apache.org/handbook/zh/get-started/ 3 基本折线图介绍内容及链接 3.1 最简单的折线图 3.2 笛卡尔坐标系中…

【unity小技巧】常用的方法属性和技巧汇总

学习目标: 最近学习过程经常遇到一些好的方法属性和技巧,但是很容易忘记,单内容都比较少,又不至于开一篇文章单独讲解各个用法,特此单独写一篇做汇总,好记性不如烂笔头,后面收获一些新的知识我还…

NineData,稳定、高效的Redis数据同步解决方案

在 DB-Engines 网站的排名中,Redis 在 Key-value 存储的NoSQL领域连续霸榜多年,是目前最流行的键值对存储数据库,被广泛用于缓存、队列、实时分析等多种高并发的场景中。在生产环境中,我们会遇到对Redis进行版本升级和架构的扩缩容…

保护您的邮件安全:Exchange Reporter Plus 助您全面监控与审计

引言: 在当今数字化时代,电子邮件已成为我们日常生活和工作中不可或缺的沟通工具。然而,随着电子邮件的广泛使用,邮件安全也成为一个备受关注的议题。为了保护组织的敏感信息和防止数据泄露,我们需要一种强大的解决方…

微信如何批量添加好友?

现在营销中,微信已成为一种重要的沟通方式。微信目前是没有自动批量添加好友的功能,需要运营者一个一个手动去添加,这样太过于浪费时间,并且加频繁了还容易被封号,今天给大家介绍几种手动批量加好友的方式以及怎么借助…

怎么把投票链接生成二维码投票链接怎么生成二维码

用户在使用微信投票的时候,需要功能齐全,又快捷方便的投票小程序。 而“活动星投票”这款软件使用非常的方便,用户可以随时使用手机微信小程序获得线上投票服务,很多用户都很喜欢“活动星投票”这款软件。 “活动星投票”小程序在…

运维小白必学篇之基础篇第十五集:FTP实验

FTP实验 实验者:胡 阳 匿名用户验证: 例:(前提配置,防火墙关闭,yum安装,同模式vmware11) 现有一台计算机huyanggw(视作服务端),IP地址为192.1…

ETLCloud轻松应对CDC实时数据流和维度数据合并的需求,实时监控订单数据

如何实现实时流与批流合并打宽数据 通常情况下我们使用CDC实时监听表销售或订单表数据的LOG时会形成流式的数据,即订单变化时数据是按照变化时间不断的传入到ETL的流程中的,业务希望实时看到订单数据的报表。 CDC每次传入的数据有可能是一条也可能是多…

遇到大数据处理,你会怎么办?快来看一下位图和布隆过滤器(下)

目录 前文 一,为什么有布隆过滤器 二,什么是布隆过滤器 三,布隆过滤器的实现 四,布隆过滤器的优缺点 4.1 布隆过滤器的优点 4.2 布隆过滤器的缺点及其改进方式 4.2.1 查找误判及其改进方式分析 4.2.2 不能删除以及改进方式分…

5月VR大数据:Quest 2下跌超1%,其它变化不大

Hello大家好,每月一期的VR内容/硬件大数据统计又和大家见面了。 想了解VR软硬件行情么?关注这里就对了。我们会统计Steam平台的用户及内容等数据,每月初准时为你推送,不要错过喔! 本数据报告包含:Steam VR硬…

如何打开谷歌地图

1、入口是map.cnmaps.cn是镜像过来的谷歌地图 2、把网站改成。www.google.cn//maps/ ①:map.cnmaps.cn ②:www.google.cn//maps/