ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

《MySQL是怎样运行的》笔记

2022-08-01 18:04:32  阅读:146  来源: 互联网

标签:字节 段长度 记录 笔记 列表 变长 MySQL NULL 怎样


InnoDB记录

InnoDB页介绍

InnoDB会将数据划分为若干个页,以页作为磁盘和内存之间交互的基本单位,InnoDB中页的大小一般为 16 KB。

原因:我们知道读写磁盘的速度非常慢,和内存读写差了几个数量级,如果一条一条的把记录从磁盘上读出来,速度太慢了。

InnoDB行格式

行格式分为四种:Compact、 Redundant、Dynamic 和 Compressed。

Compact格式

一条记录可以分为 额外信息真实数据
image

额外信息分为以下三类:

  • 变长字段长度列表
    • 作用:对于变长的数据类型,比如 VARCHAR(M) 、各种 TEXT 类型,各种 BLOB 类型,MySQl在存储真实数据时需要知道这些数据占用了多少字节。
    • 把所有变长字段的真实数据占用的字节长度都存放变长字段长度列表,各变长字段数据占用的字节数按照列的顺序逆序存放,格式为16进制。如三行数据字段name的值分别为 “aaaa” 、 “bbb” 、“d” ,它们的变长字段长度列表中的值为 01 03 04。
  • NULL值列表
    • 作用:表中的某些列可能存储 NULL 值,如果把这些 NULL 值都放到记录的真实数据中存储会很占地方,(需要存储一个 “NULL” 的字符串,每行都有是很占地方的)。
    • 使用二进制的 0(值不为 NULL) 和 1(值为 NULL) 来表示值是否为 NULL, 二进制位按照列的顺序逆序排列,且 NULL 值列表必须用整数个字节的位表示,不足一字节时前面补 0。
  • 记录头信息
    • 作用:记录一些此行记录的一些信息,该记录是否被删除等等。

真实数据

记录的真实数据除了我们自己定义的列的数据以外, MySQL 会为每个记录默认的添加一些隐藏列,具体的列如下:

列名 是否必须 占用空间 描述
row_id 6 字节 行ID,唯一标识一条记录
transaction_id 6 字节 事务ID
roll_pointer 7 字节 回滚指针

其中职业 row_id 不是必须的,在没有自定义主键以及Unique键的情况下才会添加该列。

char()类型字段的存储

对于 CHAR(M) 类型的列来说,当列采用的是定长字符集时,该列占用的字节数不会被加到变长字段长度列表,而如果采用变长字符集时,该列占用的字节数也会被加到变长字段长度列表。

标签:字节,段长度,记录,笔记,列表,变长,MySQL,NULL,怎样
来源: https://www.cnblogs.com/theheboy/p/16540966.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有