【MySQL进阶之路 | 高级篇】InnoDB存储结构

1. 数据库的存储结构 : 页

索引结构给我们提供了高效的索引方式,不过索引信息以及数据记录都是保存在文件上的.确切说是存储在页结构中.另一方面,索引是在存储引擎中实现的,MySQL服务器上的存储引擎负责对表中数据的读取和写入操作.不同的存储引擎中存放的格式一般不同.甚至有个存储引擎比如Memory都不用磁盘来存储数据,而是存储在内存中.重启MySQL服务器直接GG.

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

InnoDB将数据划分为若干个页,InnoDB中页的大小默认为16kb.以页作为磁盘和内存之间的交互的基本单位,也就是一次最少从磁盘中读取16kb的内容到内存中,一次最少把内存中的16kb的内容刷新到磁盘中.也就是说,在数据库中,不论读取一行,还是读取多行,都将这些行所在的页都加载到内存中.即,数据库管理存储空间的基本单位是页.数据库I/O操作的最小单位是页.一般情况下一个页可以存储多个行记录.

记录是按照行来存储的,但数据库的读取并不以行为单位,否则一次I/O操作只处理一行数据,效率会非常低.

(2). 页结构的概述

页a,页b,...这些页可以不在物理结构上相连,只需要通过双向链表在逻辑上相邻即可.每个数据页中的记录按照主键值从小到大的顺序组成一个单向链表,每个数据页都会为存储在其中的记录生成一个页目录,在通过主键查找某条记录的时候可以在页目录中通过二分法快速定位到对应的槽,然后再遍历槽对应分组中的记录即可快速找到指定的记录.

(3). 页的大小

不同数据库管理系统的页的大小是不同的.比如在MySQL的InnoDB存储引擎中,默认页的大小为16kb.

(4). 页的上层结构

另外在数据库中,还存在着区,段,和表空间的概念.行,页,区,段,表空间的关系如图.

1c1af07f4adc4c198f6d9b434ca85be4.png

  • 区是比页大一级的存储结构,在InnoDB存储结构中,一个区会分配64个连续的页.因为在InnoDB中页的大小默认是16kb的.所以一个区的大小是16*64kb=1mb.
  • 段是由一个或多个区组成.区在文件系统是一个连续分配的空间(在InnoDB中是连续的64个页),不过在段中不要求区与区之间是相邻的.段是数据库中的分配单位,不同类型的数据库对象以不同的段形式存在.当我们创建数据库表,索引的时候,就会创建相对应的段,比如创建一张表的时候创建表段,创建索引的时候创建一个索引段.
  • 表空间是一个逻辑容器.表空间存储的对象是段,在一个表空间中可以有一个或多个段,但是一个段只能属于一个表空间.数据库由一个或多个表空间组成,表空间从管理上可以划分为系统表空间和用户表空间,撤销表空间,临时表空间.

(5). 页的内部结构  超级重点

页如果按照类型划分,常见的有数据页(保存b+树节点),系统页,Undo页和事务数据页.数据页是我们最常用的页.

数据页的16kb大小的存储空间被划分为7个部分,分别是文件头,页头,最大最小记录,用户记录,空闲空间,页目录和文件尾.

4308af57afb0440d9ce7a1995630124f.png

这7个部分的作用.

d35afda1cae343ca829d7152f1a650f0.png

1). 文件头(File Header)和文件尾(File Trailer)

首先是文件通用部分,也就是文件头和文件尾.

文件头部信息.

  • 不同类型的页都会以File Header作为第一个组成部分,它描述了一些针对各种页都通用的一些信息.比方说这个页的编号是多少,它上一个页是谁,下一个页是谁等等.所有的数据页会组成一个双向链表.

文件头的构成.

ac41359b033a4b23a209ce1c04e46db7.png

2). 记录部分

页的主要作用是存储记录,所以最大最小记录和用户记录占了页结构的主要空间.

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

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

相关文章

cesium for unity 打包webgl失败,提示不支持

platform webgl is not supported with HDRP use the Vulkan graphics AR instead.

学习es6

1、let变量 2、const常量 3、解构赋值 4、模板字符串 5、简化对象写法 6、参数默认值 7、rest参数 8、扩展运算符 9、扩展对象方法 10、扩展数组方法 11、Set 12,Promise 13、Module模块

【SCAU数据挖掘】数据挖掘期末总复习题库简答题及解析——下

1.从某超市顾客中随机抽取5名,他们的购物篮数据的二元0/1表示如下: 顾客号 面包 牛奶 尿布 啤酒 鸡蛋 可乐 1 1 1 0 0 0 0 2 1 0 1 1 1 0 3 0 1 1 1 0 1 4 1 1 1 1 0 0 5 1 1 1 0 0 1 某学生依据这些数据做…

如何将图片转换为表格?方法并不难!

如何将图片转换为表格?在数字化时代,图片中的表格信息提取和整理成为了我们日常工作中不可或缺的一部分。不论是学术研究、商业分析还是个人生活,快速、准确地将图片转换为表格都显得尤为重要。今天,我们就来介绍四款强大的图片转…

区块链会议投稿资讯CCF A--WINE 2024 截止7.15 附录用率 附录用的区块链文章

Conference:The Conference on Web and Internet Economics (WINE) CCF level:CCF A Categories:Cross-cutting/comprehensive/emerging Year:2024 Conference time: December 2-5, 2024 录用率: sele…

兴顺物流管理系统的设计

兴顺物流管理系统的设计 管理员账户功能包括:系统首页,个人中心,管理员管理,驾驶员管理,物流资讯管理,车辆管理,基础数据管理 员工账户功能包括:系统首页,个人中心&…

51学习记录(一)——51介绍及震动感应灯

文章目录 前言一、STC89C522.内部结构及引脚 二、继电器原理及震动传感器原理三、项目搭建及实现 前言 一个学习嵌入式的小白~ 有问题评论区或私信指出 提示:以下是本篇文章正文内容,下面案例可供参考 一、STC89C52 1.简介 所属系列:51单…

API网关在微服务中的应用(1)

API拥有一些职责,如身份验证、监控、负载均衡、缓存、流控。API网关方式的核心要点是,所有客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能。 简洁图: 生产图: 网关优点 通过上图中API网关…

Linux工具(包含sudo提权与vim快捷配置)

目录 什么是软件包 查看软件包 如何安装软件 1.官方yum源下载 2.扩展yum源下载 如何卸载软件 补充知识如何将普通用户加入白名单 补充知识rzsz vim编辑器 1.命令模式(进入默认为这个模式)用户所有的输入都会被当成命令 2.插入模式 3.底行模…

01--MySQL数据库概述

目录 第1章 MySQL数据库概述 1.1 基本概念 1.2 MySQL数据库管理系统 1.3 表的关系 第2章 MySQL卸载、安装、登录 第3章 客户端使用演示 3.1 命令行客户端 3.1.1 数据库 3.1.2 数据表 3.1.3 导入数据 3.1.4 导出数据 3.2 可视化客户端 第4章 SQL语句 4.1 SQL的分类…

驾考小技巧:老北京布鞋!距离高考出分还剩3天,我却看到有些孩子已经拿了“满分”——早读(逆天打工人爬取热门微信文章解读)

我20年驾校4000多块钱,你呢? 引言Python 代码第一篇 洞见 距离高考出分还剩3天,我却看到有些孩子已经拿了“满分”第二篇 视频新闻结尾 引言 昨天的文章顺利发出 看来“梅西” 这两个字在我们这边 不是敏感词 只是很多个罗粉搞得有点过头了 …

代码随想录——分发饼干(Leetcode455)

题目链接 贪心 class Solution {public int findContentChildren(int[] g, int[] s) {Arrays.sort(g);Arrays.sort(s);int count 0;for(int i 0, j 0; i < g.length && j < s.length; i, j){if(s[j] > g[i]){count;}else{i--;}}return count;} }

【Proteus仿真】【Arduino单片机】基于物联网新能源电动车检测系统设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器&#xff0c;使用LCD1602液晶显示模块、WIFI模块、蜂鸣器、LED按键、ADC、DS18B20温度传感器等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD1602显示温…

【进阶篇-Day4:使用JAVA编写石头迷阵游戏】

目录 1、绘制界面2、打乱石头方块3、移动业务4、游戏判定胜利5、统计步数6、重新游戏7、完整代码&#xff1a; 1、绘制界面 上述思路是&#xff1a;使用一个二维数组存放图片的编号&#xff0c;然后在后持遍历即可获取对应的图片。 代码如下&#xff1a; package com.itheima.s…

获取时间戳是使用System.currentTimeMillis()还是使用new Date().getTime()(阿里开发规范)?

1.阿里规范 在阿里的Java开发手册中强制要求使用System.currentTimeMillis() 2.为什么(源码详解) new Date().getTime()它实际上也是调用的System.currentTimeMillis()&#xff0c;源码分析。 这个fastTime是它的成员变量&#xff0c;在new Date()的时候就被赋值了。 扩展一…

计算机组成原理笔记-第3章 系统总线

第三章 系统总线 笔记PDF版本已上传至Github个人仓库&#xff1a;CourseNotes&#xff0c;欢迎fork和star&#xff0c;拥抱开源&#xff0c;一起完善。 该笔记是最初是没打算发网上的&#xff0c;所以很多地方都为了自我阅读方便&#xff0c;我理解了的地方就少有解释&#xf…

Android自定义View之不得不知道的文件attrs

其中demo_style如下:一般都是放的.9图片&#xff0c;为了方便就放个颜色了 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190820183209784.png?x-oss-processimage/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLm NzZG4ubmV0L3FxXzQyNzYxMz…

IDS使用规则

ids入侵检测系统 Snort(基于特征的入侵检测系统) 软硬件配套 snort官网链接&#xff1a;Snort - Network Intrusion Detection & Prevention System(https://www.snort.org) 环境&#xff1a;centos7,拖动需要开共享粘贴板和开双向 一、daq 1、预装dap所需程序 yum inst…

Unity 限时免费资源 - FANTASTIC万圣节资源包

Unity 资源 - FANTASTIC - Halloween Pack 万圣节包 前言资源包内容领取兑换码 前言 亲爱的 Unity 游戏开发者们&#xff0c;今天要给大家介绍一款限时免费的优质资源包 - FANTASTIC - Halloween Pack 万圣节资源包。 这个资源包为您的游戏创作带来了丰富的万圣节主题元素。其…

《STM32 HAL库》CAN通信系列函数详尽解析——HAL_CAN_Init()

食用指南&#xff1a;本文主要内容为梳理CAN初始化函数主要运行逻辑及重点功能实现代码的详尽解析。函数源码在文末&#xff0c;建议在阅读源码之后观看。 CAN相关寄存器图&#xff1a; 主要逻辑分析&#xff1a; 下面分点梳理函数的主要逻辑&#xff08;注意逻辑序号&#xf…