Mysql compact行格式
InnoDB行格式类型(Compact格式)
Compact行格式示意图:
Mysql中变长字段是如何存储的
mysql支持变长的数据类型,varchar(m)、varbinary(m)、text、blob类型等,这些变长的数据类型占用的存储空间分为两部分:
1.真正的数据内容
2.申明占用的字节数
如果不保存真实数据占用字节数,那么mysql服务器无法判断出真实数据有多长,导致无法准确取数据 。所以我们在存储真实数据的时候需要顺便把这些数据占用的字节数也存起来。
在compact行格式中,把所有边长类型的长度存放在行记录的开头部位形成一个列表,按照列的逆序存放。
CHAR是一种固定长度的类型,VARCHAR则是一种可变长度的类型VARCHAR(M),M代表最大能存多少个字符。( MySQL5.0.3以前是字节,以后就是字符)
基本存储方式
变长字段的长度列表,null值列表,数据头,column01的值,column02的值,column0n的值...
变长字段如何存储
# 假如有三个字段 id,name,age其中name是变长类型(Varchar)|id|name|age||1|wang|18|磁盘里的存储为:0x04 null值列表 数据头 1 wang 18# 其中0x04表示name长度为4
# 假如有三个字段 id,name,age其中name是变长类型(Varchar)|id|name|age||1|wang|18||2|li|20|磁盘里的存储为:0x04 null值列表 数据头 1 wang 18 0x02 null值列表 数据头 2 li 20
# 假如有三个字段 id,name,desc,age其中name,desc是变长类型(Varchar)|id|name|desc|age||1|wang|shuaige|18|磁盘里的存储为:0x07 0x04 null值列表 数据头 1 wang shuaige 18# 其中0x04表示name长度为4,0x07表示desc的长度为7
NULL值列表是如何存储的
# 假如有三个字段 id,name,age其中name是变长类型(Varchar)|id|name|age||1|wang|18|磁盘里的存储为:0x04 00 数据头 1 wang 18# 其中00表示name,age都不为空,当然这里id是主键,肯定不为空,所以没记录
记录头信息
除了变长字段长度列表、NULL值列表之外,还有一个用于描述记录的记录头信息,它是由固定的5个字节组成。5个字节也就是40个二进制位,不同的位代表不同的意思,如图:
记录的真实数据
记录的真实数据除了我们自己定义的列的数据以外,还会有三个隐藏列:
实际上这几个列的真正名称其实是:DB_ROW_ID、DB_TRX_ID,DB_ROLL_PTR。
行溢出数据
如果该VARCHAR类型的列没有NOT NULL属性,那最多只能存储65532个字节的数据,因为变长字段的长度占用2个字节,NULL值标识需要占用1个字节。
记录中的数据太多产生的溢出
一个页的大小一般是16KB,也就是16384字节,而一个VARCHAR(M)类型的列就最多可以存储65533个字节,这样就可能出现一个页存放不了一条记录。
记录中的数据太多产生的溢出
一个页的大小一般是16KB,也就是16384字节,而一个VARCHAR(M)类型的列就最多可以存储65533个字节,这样就可能出现一个页存放不了一条记录。
Dynamic和Compressed格式
参考资料:
Mysql中变长字段是如何存储的 https://blog.csdn.net/weixin_29491885/article/details/104846592
Mysql compact行格式相关推荐
- mysql compact_[MySQL]InnoDB行格式剖析_MySQL - compact
... $this->layout->main=View::make('dash')->nest('content','comments.list',compact('comment ...
- MySQL如何存储数据?(InnoDB的Compact行格式)
文章目录 1. 概要 2. compact行格式 2.1 示意图 2.2 记录的额外信息 2.2.1 变长字段长度列表 2.2.2 NULL值列表 2.2.3 记录头信息 2.2.4 记录的真实数据 ...
- MySQL原理 - InnoDB引擎 - 行记录存储 - Compact 行格式
MySQL 服务器上负责对表中数据的读取和写入工作的部分是存储引擎,比如 InnoDB.MyISAM.Memory 等等,不同的存储引擎一般是由不同的人为实现不同的特性而开发的,目前OLTP业务的表如 ...
- MySQL COMPACT栏格式导致输出乱码
CentOS 5.2, PHP 5.1.6, MYSQL 5.0.77. 数据库UTF8,表MYISAM引擎,采用PEAR::MDB2访问. 读取出的中文会有乱码尾巴.使用EMS/navicat查看数 ...
- mysql学习-Innodb行格式compact行记录解析
前言 了解行结构的意义: 知道设置好的主键可以节省空间 知道char的大小设置错误还不如varchar 知道字符集对变长字段类型的影响 知道null 和 空串的区别 还有一些-我还没发现 Compac ...
- 【MySql进阶】行格式详解:COMPACT、Dynamic
概述 我们平时是以记录为单位来向表中插入数据的,这些记录在磁盘上的存放方式也被称为 行格式 或者 记录格式 . InnoDB 到现在为止设计了4种不同类型的 行格式 ,分别是 Compact . Re ...
- mysql format row_MySQL之InnoDB存储引擎:Row Format行格式
MySQL下用的比较多.比较广的存储引擎就属InnoDB.这里我们来介绍下InnoDB存储引擎下数据记录的存储格式--Row Format行格式 基本操作 在MySQL中,所谓Row Format行格 ...
- mysql行格式_MySQL 行格式
以 MySQL 默认的存储引擎 InnoDB 为例 InnoDB 包含以下四种行格式 Compact Redundant Dynamic Compressed 指定行格式 CREATE TABLE 表 ...
- mysql 表 页 行_Mysql之InnoDB行格式、数据页结构
Mysql架构图 存储引擎负责对表中的数据的进行读取和写入,常用的存储引擎有InnoDB.MyISAM.Memory等,不同的存储引擎有自己的特性,数据在不同存储引擎中存放的格式也是不同的,比如Mem ...
最新文章
- 安卓手机充电慢_3.0适用苹果安卓手机充电器头
- 三星s轻奢android+p,三星Galaxy S轻奢版5月21日将至:骁龙660处理器+安卓8.0
- coremark 官网对各种单片机的测评评分
- 自定义ChannelHandler 的添加过程
- 机器学习两种距离——欧式距离和马氏距离
- 硬链接与符号链接的比较?
- bat批处理for /f命令
- 【Spring源码】Spring Transactional事务:传播机制(Propagation) 介绍 和 源码剖析
- C++ 简单实现unorderset和unordermap
- visio studio调试 字符串断点
- Java 创建xml文件和操作xml数据
- Anroid性能优化系列——Improving Layout Performance(二)
- Design System Application - Chapter 2 字体 Typography
- 极光im php,极光IM- 微信小程序 SDK - 极光文档
- oracle 取awr报告,Oracle生成awr报告
- profinet远程IO总线模块IP67防护等级的优势
- 第三方网络广告平台窘境
- D碳社区周报:上海市:推进崇明世界级生态岛碳中和示范区建设,院士专家在论坛上提出建议
- cobbler(一) cobbler实现系统自动安装
- The specified module could not be found的解决办法
热门文章
- kinetic安装cartographer及gazebo仿真测试教程[22年1月23日测试]
- 支付退款流程设计_如何设计订单系统?不妨看看这篇文章
- 软件驻场开发是什么?有什么好处
- 时代中国三年“老去” 岑钊雄500强空梦一场
- PyQt5制作一个爬虫小工具,获取某网上市公司的财务数据可视化
- ajax调用fastreport,使用Ajax更新ASP.Net MVC项目中的报表对象
- 鸟人的Android揭秘(9)——Init进程运行过程
- 赋值运算符与赋值表达式的说明和用法
- 在unity中使用Newtonsoft.Json
- VHDL语言设计8421码加法器(使用quartus)