1:mysql服务器处理client分三部分:链接管理 解析与优化 存储引擎(表处理器,Innodb)
2:字符集和比较规则 一个比较规则对应一个的字符集,而Mysql之所以能排序 就是把值根据字符集编码之后进行排序
3.innoDB记录存储引擎
存储方式:将数据划分为若干个页,以页作为磁盘和内存直接交互的基本单位。每页大小16Kb 在一般情况下就是从磁盘读16kb到内存, 把内存16kb刷盘到磁盘中
问题:如果一次值更新1条记录的字段没达到16kb,那么是怎么刷盘的?
4.平常我们都是以记录为单位向表中插入数据,这些记录在磁盘的存放也成为行格式
COMPACT行格式由:(变长字段长度列表+NULL值列表+记录头信息 记录的额外信息)+列1的值+列2的值+.....列N的值
所以像 varchar等变长字段类型,=真正的数据内容+数据占用的字节数(存在变长字段的长度列表里面) 各个变长字段的真实数据占用的字节数按照列的逆序存放,
为啥是逆序呢?
5.NULL值列表
一些记录中可能存储NULL值,NULL是怎么存储的
如果把NULL都放到记录的真实数据中存储会很占地方,所以COMPACT行格式会把一条记录的null的列统一管理 排除主键和不为NULL的列,按照二进制位,逆序排列 二进制位1时 标识该列的值为NULLmm
6.记录头信息固定5个字节=40位每一位代表不同的意思
7.记录的真实数据
innoDB主键生成策略:优先以用户定义的主键为主,没有则以不为NULL的Unique,如果也没有,则添加一个名为row_id的隐藏主键列
标签:存储,记录,变长,Mysql,磁盘,NULL,主键 From: https://www.cnblogs.com/LZXX/p/16824291.html