mysql中compact行的存储结构
mysql中行的格式类型包括:Compact、redundant、dynamic、compressed这四种,行和行之间是通过一个单向链表的形式来连接的,而我在实际工作中最常用到的是compact类型。
具体行的类型可以在create中看到,例如:

compact行类型又是由:记录的额外信息和记录的真实数据组成。

上图中的前五项:
变长字段长度列表、NULL标志位、记录头信息组成了记录的额外信息
列1数据、列2数据组成了记录的真实数据
1.变长字段长度列表:存储的是行中的变长类型在真实数据中的长度其中变长类型包括:varchar、text、blob,变长类型的真实长度在变长字段长度列表中的存储是逆序存储的如果实际存储长度小于255则用一个字节表示,如果大于255则用两个字节表示
2.NULL标志位:NULL标志位可以看作是NULL值列表,在表中的某些列中是可能存储NULL值的,如果把这些NULL值放到记录的真实数据中存储是很占用空间的,所以Mysql中Compact行格式会把这些列值为NULL的列统一进行管理并存储到NULL值列表中和变长字段长度列表一样它也是逆序存储的NULL值列表的存储不占用真实存储空间只占用NULL值列表,如果当前列为NULL值则用二进位1表示,当前列不为NULL值则用二进制位0表示,如果当前行中所有列都为NOT NULL则不会分配NULL列表的存储空间,在实际开发中创建表时都会设置为NOT NULL因为这样可以节省空间、提高整体的效率
注意:在行信息中有些信息是隐藏的,Mysq会为每行记录都添加transaction_id和roll_pointer列,但row_id只会在表中没有定义主键的时候才会记录添加,相当于Mysql帮我们添加了一个主键
varchar变长类型的行溢出:因为varchar是变长类型,所以在存储数据时超过一定长度(大致是8098字节)时会发生行一出,移除后的记录内容为:768字节+剩余内容的地址信息(20字节),注意这里不是超过768就会行溢出而是溢出后只存储768字节
行溢出临界点判断的计算公式:136+2*(27+n) > 16384 其中n为列中实际存储的字节数
mysql中compact行的存储结构的更多相关文章
- 【数据库】数据库的锁机制,MySQL中的行级锁,表级锁,页级锁
转载:http://www.hollischuang.com/archives/914 数据库的读现象浅析中介绍过,在并发访问情况下,可能会出现脏读.不可重复读和幻读等读现象,为了应对这些问题,主流数 ...
- 详述 MySQL 中的行级锁、表级锁和页级锁
转自:https://blog.csdn.net/qq_35246620/article/details/69943011 refer:cnblogs.com/f-ck-need-u/p/899547 ...
- [数据库事务与锁]详解五: MySQL中的行级锁,表级锁,页级锁
注明: 本文转载自http://www.hollischuang.com/archives/914 在计算机科学中,锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并发控制中保证对互斥要求的 ...
- MySQL中的行级锁,表级锁,页级锁
在计算机科学中,锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并发控制中保证对互斥要求的满足. 在数据库的锁机制中介绍过,在DBMS中,可以按照锁的粒度把数据库锁分为行级锁(INNODB引 ...
- 【转】MySQL中的行级锁,表级锁,页级锁
在计算机科学中,锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并发控制中保证对互斥要求的满足. 在数据库的锁机制中介绍过,在DBMS中,可以按照锁的粒度把数据库锁分为行级锁(INNODB引 ...
- 转 MySQL中的行级锁,表级锁,页级锁
对mysql乐观锁.悲观锁.共享锁.排它锁.行锁.表锁概念的理解 转载. https://blog.csdn.net/puhaiyang/article/details/72284702 实验环境 ...
- mysql中用命令行复制表结构(数据)
mysql中用命令行复制表结构的方法主要有一下几种: 1.只复制表结构到新表 CREATE TABLE 新表 SELECT * FROM 旧表 WHERE 1=2; 或 CREATE TABLE 新表 ...
- Navicat使用教程:获取MySQL中的行数(第1部分)
下载Navicat Premium最新版本 Navicat Premium是一个可连接多种数据库的管理工具,它可以让你以单一程序同时连接到MySQL.Oracle及PostgreSQL数据库,让管理不 ...
- mysql 中实现行变列
前言: mysql行列变化,最难的就是将多个列变成多行,使用的比较多的是统计学中行变列,列变行,没有找到现成的函数或者语句,所以自己写了存储过程,使用动态sql来实现,应用业务场景,用户每个月都有使用 ...
- SAP Sybase SQLAnywhere[ASA]数据库中数据行的存储机制
SQLAnywhere[ASA]数据库(以下简称ASA)中的数据库文件,是如何存储普通的表的记录行呢?插入.更新.删除时,记录行的存储会有什么变化? 了解了这些,才能更好的理解如何对ASA数据库进行调 ...
随机推荐
- selenium 进入页面提示 503 Service Temporarily Unavailable
进入三级页面提示503 Service Temporarily Unavailable,如果手动刷新页面重新加载成功 网上看都是如何配置及原因的,没告诉如何解决 于是我想,如果是这样的话,执行刷新操作 ...
- DB读写分离情况下,如何解决缓存和数据库不一致性问题?
前言 在读写分离的情况下,缓存和数据库数据不一致怎么解决? 请看这一篇如何更新缓存保证缓存和数据库双写一致性? 如何解决DB数据库的数据不一致问题? 请看这一篇怎么解决DB读写分离,导致数据不一致问题 ...
- Oracle操作审计
因为信安的要求,要对Oracle加审计.看了一下,原来是有开的,类型为DB: SQL> show parameter audit; NAME TYPE VALUE --------------- ...
- Docker 1.12 :认识 Swarm 模式下的节点崩溃处理
Posted on 2016年7月25日 上周小编为大家推荐了<Docker 1.12:用 Swarm 模式创建 Swarm 集群>,本周我们将深入为大家解读 1.12 版本 Docker ...
- [源码系列:手写spring] IOC第四节:Bean属性注入
主要内容 添加PropertyValue类表示Bean的属性. 为Bean定义对象BeanDefinition添加PropertyValues列表用来存储Bean的各种属性. Bean实例化时根据Pr ...
- 接口新特性--java进阶day03
1.接口新特性 在JDk8和JDK9开始,接口可以定义普通方法 这时就会感到很奇怪,明明之前说好接口只是用来制定规则的,为什么现在又可以定义普通方法了呢? 我们以一个公司案例进行讲解,公司1.0上线了 ...
- 多态的转型和案例--java进阶day02
1.多态的转型 1.向上转型 我们之前学的多态创建对象,使用的都是向上转型,父类引用指向子类(赋值方式则是从子到父),f拿到子类的地址,就能访问子类的堆内存 2.向下转型 和向上转型相反,子类引用指向 ...
- Docker部署RocketMQ(JDK11)
说起微服务,不谈容器,不谈云,那还谈个啥?容器中又以Docker最为流行,那么我们今天就来实践下容器化微服务,然后顺带解决下各种疑难杂症. 环境: Idea2019.03/Gradle6.0.1/JD ...
- Mapper.xml配置的几种方法:
一. 7.4.1. <mapper resource=" " /> 使用相对于类路径的资源(现在的使用方式,UserMapper接口与UserMapper.xml的包路 ...
- FastAPI与SQLAlchemy同步数据库集成
title: FastAPI与SQLAlchemy同步数据库集成 date: 2025/04/15 01:27:37 updated: 2025/04/15 01:27:37 author: cmdr ...