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数据库进行调 ...
随机推荐
- C# 中的“相等判断”
C# 中的"相等判断" C# 中判断相等的方式很多,例如: 双等号 == 实例的 Equals() 方法 Object.Equals() 静态方法 Object.Refe ...
- 厦门大学3篇DeepSeek报告pdf汇总(附下载地址)
最近,厦门大学大数据教学团队发布了3份DeepSeek大模相关报告.其中<DeepSeek大模型企业应用实践,全景解读与技术演进>这份报告足足有150页,把国产大模型在企业里怎么用.技术上 ...
- css3 渐变边框如何实现圆角效果
常规的 border-image 属性如果直接使用 border-radius 会无效,关于如何实现渐变边框圆角,网上流传着大概这么几种办法: 渐变背景方式(仅适用于纯底色背景) 借助 after 伪 ...
- DeepSeek 多模态大模型 Janus-Pro 本地部署教程
下载模型仓库 git clone https://github.com/deepseek-ai/Janus.git 国内下载仓库失败时,可以使用以下代理: git clone https://gith ...
- Kubernetes的工作机制
云计算时代的操作系统 Kubernetes 是一个生产级别的容器编排平台和集群管理系统,能够创建.调度容器,监控.管理服务器. Kubernetes 的基本架构 操作系统的一个重要功能就是抽象,从繁琐 ...
- go 链表操作
链表的特点和初始化 链表的特点 用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的) 结点 结点(node) 数据域 => 存储元素信息 指针域 => 存 ...
- nginx配置2个不同端口的应用
如何配置nginx,在同一台服务器上,部署2个不同端口的web应用? 1,利用Django框架搭建的web应用,默认端口是8000: 2,利用Flask框架搭建的web应用,默认端口是5000: 第一 ...
- weblogic日志查看
都是使用tail -f catalina.out命令来查看的,不要太顺手: 今天登陆到公司另外一个Team 的服务器上,发现装的是weblogic,手痒想看看weblogic怎么看日志,找了老半天,才 ...
- 一次Java后端服务间歇性响应慢的问题排查记录
分享一个之前在公司内其它团队找到帮忙排查的一个后端服务连接超时问题,问题的表现是服务部署到线上后出现间歇性请求响应非常慢(大于10s),但是后端业务分析业务日志时却没有发现慢请求,另外由于服务容器li ...
- MySQL-排序相关原理分析
全字段排序和rowId排序 建表语句如下: CREATE TABLE `t` ( `id` int(11) NOT NULL, `city` varchar(16) NOT NULL, `name` ...