对于Innodb存储引擎来说,数据是被存储到磁盘中的,当我们想要读取表中的数据时,需要将这些数据加载到内存中,那么是一条一条的将数据加载到内存中的吗?
- 磁盘的读取速度相对于cpu来说,相差好多个数量级,所以MySQL在处理读取磁盘数据的时候,是以页为单位来读取数据的,一页默认等于16KB(即便一次只是获取一条记录,也会读取一页数据)。*
##### 数据表中的记录是以何种格式存储到磁盘中的?(mysql将记录的格式起名为行格式)
1.compact(紧凑型)(重点)
一条记录其实是被分为记录的真实数据,和记录的额外信息两部分存储到磁盘中的。
记录头信息:
next_record:指向下一条记录的相对位置
delete_mask:该记录是否已被删除
record_type:标志当前记录的类型0-普通1-非叶子节点2-最小记录3-最大记录
变长字段长度列表:倒序存放(先去table.frm文件中找到字段的定义信息)
NULL值列表:倒序存放
真实数据:正序存放
因为缓存的局部性,所以,常用的字段在建表时需要写在前边
2.redundant(冗余型)
3.dynamic(动态型)
compact行格式 + 溢出页全部存储到额外的数据页中,只保留指向数据页的指针
4.compressed(压缩型)
可以压缩数据
所有的记录是按照递增的方式,以单向链表的方式连接到一起的
以上文章来源于《MySQL是怎样运行的-从根上理解MySQL》 [juejin.cn/book/684473…]