内容学习自(但并不是完全复制粘贴😁):
https://juejin.cn/book/6844733769996304392/section/6844733770046636040
作者:小孩子4919
目录
下面就是一些面试假想,这块复习好了,要引导面试官讲mysql的时候给他讲讲内存页~
面试官:你们mysql用的是什么存储引擎呢?
答:innodb
那么为什么用innodb呢?有什么好处呢?他的存储结构是什么样的呢?
首先,mysql 存储引擎中,想要获取某些记录的时候,并不是一条一条的读出来的,而是将数据划分为若干页。
以页作为磁盘和内存之间交互的基本单位,InnoDB中页的大小一般为 16 KB。也就是在一般情况下,一次最少从磁盘中读取16KB的内容到内存中,一次最少把内存中的16KB内容刷新到磁盘中。
MYSQL是行级存储,跟大数据的一些列级分布式存储是有区别的。
行格式有
Compact
、Redundant
美[rɪˈdʌndənt]、Dynamic
和Compressed
行格式
指定行格式的语法
我们可以在创建或修改表的语句中指定行格式
:
CREATE TABLE 表名 (列的信息) ROW_FORMAT=行格式名称
ALTER TABLE 表名 ROW_FORMAT=行格式名称
我们数据库一般用的是什么是行格式呢?
一般都是默认的。使用:下面语句,查看到我们线上用的都是Dynamic,那么接下来就得重点关注dynamic了~
USE xxx;
show table status like 'table_name';
Compact格式
看这个图眉清目秀的,直接从小孩子那弄过来了.面试官问,记录长什么样就靠这个了.
一条完整的记录其实可以被分为
记录的额外信息
和记录的真实数据
两大部分
变长字段长度列表
这边其实最关键的信息提取:(快速记忆)
1.变长的字段是有个列表的
2.变长的列表在每一行内容的前面
3.按照我们存储的列,逆序存放
注意看:这个表是这样的,数据是下面那样
我们只把,变长字段存在一个记录的头部。
然后C1 C2 C4这三列,是变长,对应长度是4 3 1
那么存在头部就是,
用十六进制表示的效果就是(各个字节之间实际上没有空格,用空格隔开只是方便理解):
01 03 04
计算到底是放一个字节还是两个字节:(下面知道个大概就行,面试官不会这么蛋疼问这个吧)
由于第一行记录中
c1
、c2
、