MySQL八股学习过程2行的存储 from 小林coding

news2024/11/25 8:19:42

MySQL八股学习过程2行的存储 from 小林coding

  • MySQL数据的存放
  • MySQL表结构
  • InnoDB行格式
    • 记录的额外信息
    • 记录的真实数据

MySQL数据的存放

下面的命令能够查询到MySQL数据库文件的存放位置

SHOW VARIABLES LIKE 'datadir';

一张表的结构会保存在表同名.frm中,数据会保存在表同名.ibd
表空间的文件结构如下

MySQL表结构

MySQL表结构

  1. 行(ROW)
    数据库表中的记录都是按照行进行存放的,每行根据不同的行格式,有不同的存储结构
  2. 页(page)
    记录按照行的形式组织,但是数据库的读取并不以行为单位,而是以页为单位进行读写的(减少IO,提升效率),默认每个页的大小为16KB
  3. 区(extent)
    InnoDB存储引擎用B+树来组织,并且MySQL对B+树做了一些修改,每一层之间的节点用双向链表连接起来,但是这样会造成一个页面不连续的问题,页面不连续导致磁盘随机IO,因此在表中数据量大的时候,为索引分配空间将不以页为单位,而是以区为单位,每个区的大小为1MB
  4. 段(segment)
    表空间由多个段组成,段是由多个区组成,段有数据段(存放B+树叶节点),索引段(存放B+树非叶节点)和回滚段(回滚数据集合)

InnoDB行格式

四种分别是 Redundant、Compact、Dynamic和 Compressed 行格式
5.7以后默认使用的为Dynamic,Compact格式与Dynamic相似现在讲解Compact行格式
Compact数据格式
记录可以分为记录的额外信息和记录的真实数据两个部分

记录的额外信息

  • 变长字段长度列表
    会将边长数据的真实占用字节数按照列的顺序倒序存储,值得注意的是如果为NULL,那么不会存储到边长的长度字段中
    为何要逆序存储,因为读取头左边是记录头信息,右边是变长字段长度列表,那么将加大边长数据对应的长度与变长数据本身同时存放在一个cache中的概率,提升速度
  • NULL值列表
    某些列可能会存储NULL值,Compact格式将这些NULL值记录到列表中,同样是逆序存储的
  • 记录的头信息
    1. delete_mask:标识记录是否被删除
    2. next_record:下一条记录的位置(可以理解成一个链表指针)
    3. record_type:记录的类型(0为普通记录,1为B+树非叶节点,2为最小记录,3为最大记录)

记录的真实数据

除了我们定义的字段,还有三个隐藏字段

  • rowid
    没有指定主键时将会创建row_id字段
  • trx_id
    事务ID,表示数据由哪个事务生成,trx_id是必须的
  • roll_pointer
    上个版本的指针

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

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

相关文章

导轨式 称重传感器 压力应变桥信号处理 隔离变送器

主要特性 DIN11 IPO 压力应变桥信号处理系列隔离放大器是一种将差分输入信号隔离放大、转换成按比例输出的直流信号导轨安装变送模块。产品广泛应用在电力、远程监控、仪器仪表、医疗设备、工业自控等行业。此系列模块内部嵌入了一个高效微功率的电源,向输入端和输…

Kyuubi的介绍优势(官网链接)

官网链接:https://kyuubi.apache.org/ Apache Kyuubi™ 是一个分布式多租户网关,用于在数据仓库和 Lakehouse 上提供无服务器 SQL。 Kyuubi 在各种现代计算框架(例如 Apache Spark、 Flink、 Doris、 Hive和Trino等)之上构建分布…

CMU 15-445 Project #2 - B+Tree(CHECKPOINT #2)

CHECKPOINT #2 一、题目链接二、准备工作三、部分实现1.锁操作操作类型定义安全页面判断加锁操作解锁操作叶子页面查找操作 2.查找操作3.插入操作4.删除操作 四、评测结果 一、题目链接 二、准备工作 见 CMU 15-445 Project #0 - C Primer 中的准备工作。 三、部分实现 1.锁操…

linux安装conda

linux安装conda 卸载conda 在主目录下,使用普通权限安装: ./Anaconda3-2023.03-1-Linux-x86_64.shanaconda的目录是ENTER

139. 单词拆分

139. 单词拆分 原题链接:完成情况:解题思路:参考代码: 原题链接: 139. 单词拆分 https://leetcode.cn/problems/word-break/ 完成情况: 解题思路: dp动态递归去接,算0-n所有范围…

Xshell 7 评估期已过继续免费使用方法

1. 评估期已过的示例 2.解决方法 如果需要继续使用,一是去网上寻找绿色版本的Xshell,但是可能不安全。 二是重新下载一个免费版本,覆盖安装即可。 2.1 官网下载地址:https://www.xshell.com/zh/free-for-home-school/ 2.2下载安…

Pytorch:利用torchvision调用各种网络的预训练模型,完成CIFAR10数据集的各种分类任务

2023.7.19 cifar10百科: [ 数据集 ] CIFAR-10 数据集介绍_cifar10_Horizon Max的博客-CSDN博客 torchvision各种预训练模型的调用方法: pytorch最全预训练模型下载与调用_pytorch预训练模型下载_Jorbol的博客-CSDN博客 CIFAR10数据集下载并转换为图片&am…

gitlab配置公钥

1、打开本地git bash,使用如下命令生成ssh公钥和私钥对 ssh-keygen -t rsa -C yourEmailgitlab.com2、然后打开~/.ssh/id_rsa.pub文件,复制里面的内容 cd ~/.ssh ls cat ./id_rsa.pub3、打开gitlab,找到Profile Settings–>SSH Keys—>Add SSH Key,并把上一…

【多线程】(六)Java并发编程深度解析:常见锁策略、CAS、synchronized原理、线程安全集合类和死锁详解

文章目录 一、常见锁策略1.1 乐观锁和悲观锁1.2 读写锁1.3 重量级锁和轻量级锁1.4 自旋锁1.5 公平锁和非公平锁1.6 可重入锁和不可重入锁 二、CAS2.1 什么是CAS2.2 CAS的实现原理2.3 CAS应用2.4 ABA问题 三、synchronized原理3.1 synchronized锁的特点3.2 加锁工作过程3.3 锁消…

VM(CentOS7安装和Linux连接工具以及换源)

目录 一、Linux意义 二、安装VMWare 三、centos7安装 1、正式安装CentOS7: 2、安装不了的解决方案 2.1常见问题——虚拟机开机就黑屏的完美解决办法 3、查看、设置IP地址 ① 查看ip地址:ip addr 或者 ifconfig, 注意与windows环境的区别…

labelme+sam在windows上使用指南

其实官网讲的很清楚了,这里做一个笔记,方便自己后面直接看。 首先,贴一下官方的链接,作者老哥很强,respect! 使用流程: https://github.com/wkentaro/labelme#installation 资源: ht…

数据库锁机制

锁机制 1. 概述2. 并发事务的不同场景2.1 读-读情况2.2 写-写情况2.3 读-写或写-读情况2.3.1 方案一:读事务使用MVCC(多版本并发控制),写事务加锁2.3.2 方案二:读、写事务均加锁 3. 锁分类3.1 从数据操作类型&#xff…

1.Docker概念

文章目录 Docker概念Docker容器与虚拟机的区别内核中的2个重要技术Linux Namespace的6大类型docker三个重要概念部署Dockeryum安装二进制安装 Docker 概念 docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源。docker可以让开发者打包他们的…

【PostgreSQL内核学习(三)—— 查询重写】

查询重写 查询重写系统规则视图和规则系统ASLO型规则的查询重写规则系统与触发器的区别 查询重写的处理操作定义重写规则删除重写规则对查询树进行重写 声明:本文的部分内容参考了他人的文章。在编写过程中,我们尊重他人的知识产权和学术成果&#xff0c…

王道计算机网络学习笔记(4)——网络层

前言 文章中的内容来自B站王道考研计算机网络课程,想要完整学习的可以到B站官方看完整版。 四:网络层 ​​​​​​​​​​​​​​在计算机网络中,每一层传输的数据都有不同的名称。 物理层:传输的数据称为比特(Bi…

宝塔的Redis绑定IP

宝塔安装Redis 软件商店搜索Redis 连接宝塔面板的redis服务器失败的解决办法 检查Linux是否放行6379端口修改Redis绑定IP检查阿里云/腾讯云的防火墙策略是否放行6379端口 1.bind 127.0.0.1 修改为 bind 0.0.0.0 127.0.0.1 表示只允许本地访问,无法远程连接 0.0.0.0 表…

基于Python的用户登录和密码强度等级测试|Python小应用

前言 那么这里博主先安利一些干货满满的专栏了! 这两个都是博主在学习Linux操作系统过程中的记录,希望对大家的学习有帮助! 操作系统Operating Syshttps://blog.csdn.net/yu_cblog/category_12165502.html?spm1001.2014.3001.5482Linux S…

Micro-app vue3+vite+ts用法

前言: 微前端的概念是由ThoughtWorks在2016年提出的,它借鉴了微服务的架构理念,核心在于将一个庞大的前端应用拆分成多个独立灵活的小型应用,每个应用都可以独立开发、独立运行、独立部署,再将这些小型应用融合为一个…

文库小程序在线阅读下载文档模板流量主小程序

一、什么是文库小程序? 文库小程序连接流量主,具体流程是粉丝进入小程序下载文档模板,下载前需要看广告,阅读后可以免费下载文档模板。具体的小程序演示请参见抖音云云文库 二、文库小程序的应用范围 小程序主要实现文档共享功能…

Redis Linux安装

Redis版本下载,版本地址http://download.redis.io/releases/ 点击跳转 新建文件夹 mkdir /usr/local/redis 上传压缩包,并使用命令解压tar -zxvf redis-6.2.8.tar.gz (redis-6.2.8.tar.gz为安装包) 安装依赖 yum install gcc-c 编译 make 安装 make install 修改配置 …