[mysql]面试-InnoDB记录存储结构

内容学习自(但并不是完全复制粘贴😁):

https://juejin.cn/book/6844733769996304392/section/6844733770046636040

作者:小孩子4919

目录

指定行格式的语法

Compact格式

变长字段长度列表 

NULL值列表


下面就是一些面试假想,这块复习好了,要引导面试官讲mysql的时候给他讲讲内存页~

面试官:你们mysql用的是什么存储引擎呢?

答:innodb

那么为什么用innodb呢?有什么好处呢?他的存储结构是什么样的呢?

首先,mysql 存储引擎中,想要获取某些记录的时候,并不是一条一条的读出来的,而是将数据划分为若干页。

以页作为磁盘和内存之间交互的基本单位,InnoDB中页的大小一般为 16 KB。也就是在一般情况下,一次最少从磁盘中读取16KB的内容到内存中,一次最少把内存中的16KB内容刷新到磁盘中。

MYSQL是行级存储,跟大数据的一些列级分布式存储是有区别的。

行格式有CompactRedundant 美[rɪˈdʌndənt]、DynamicCompressed行格式

指定行格式的语法

我们可以在创建或修改表的语句中指定行格式

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 

计算到底是放一个字节还是两个字节:(下面知道个大概就行,面试官不会这么蛋疼问这个吧)

由于第一行记录中c1c2

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值