简述Mysql的一些问题(持续学习中小林图解mysql中)

1.Mysql的null值是如何存放的?

mysql的compact行格式会把值为null的列存储到null值列表中。NULL 值列表也不是必须的。当数据表的字段都定义成 NOT NULL 的时候,这时候表里的行格式就不会有 NULL 值列表了这样可以至少节省 1 字节的空间(NULL 值列表至少占用 1 字节空间)。但是null值列表并不是固定的1字节空间。当有一条记录有9个字段值都是null,就会创建2字节空间的null值列表,以此类推。

2.mysql怎么知道varchar(n)实际占用数据的大小?

mysql的compact行格式中会使用 变长字段长度列表 存储变长字段实际占用的数据大小。

3.varchar(n)中的n最大取值是多少?

varchar(n) 中 n 的最大取值与 MySQL 的版本、行格式以及字符集有关:

  • 早期版本:在 MySQL 5.0.3 之前,varchar 类型的最大长度为 255 字节。
  • 之后版本:在 MySQL 5.0.3 及以后版本,一行记录最大可以存储65535字节的数据,但是这个是包含 变长字段字节数列表占用的字节数null值列表所占用的字节数,因此在算varchar(n)中n的最大值时,需要减去这两个列表所占用的字节数。

如果一张表只有一个 varchar(n) 字段,且允许为 null,字符集为 asci。varchar(n)中n最大取值为 65532。

计算公式:65535-变长字段字节数列表所占用的字节数-null值列表所占用的字节数=65535-2-1=65532。

如果有多个字段的话,要保证所有字段的长度+变长字段字节数列表所占用的字节数 + NULL值列表所占用的字节数<= 65535。

4.行溢出后,mysql是怎么处理的?

如果一个数据也存不了一条记录,InnoDB存储引擎会自动将溢出的数据存放到 溢出页 中。

compact行格式对行溢出的处理是这样的:当发生行溢出时,在记录的真实数据处只会保存该列的一部分数据,而把剩余的数据存放在溢出页中,然后真实的数据处用20字节存储指向溢出页的地址,从而可以找到剩余数据所在的页。

Compressed 和 Dynamic 这两种格式采用完全的行溢出方式,记录的真实数据处不会存储该列的一部分数据,只存储 20 个字节的指针来指向溢出页。而实际的数据都存储在溢出页中。

#mysql#
全部评论

相关推荐

📍面试公司:小米智能座舱💻面试岗位:用研📚面试问题:1.&nbsp;面试官首先介绍了一下业务2.&nbsp;自我介绍3.&nbsp;对这个岗位的理解4.&nbsp;讲述一个最能代表自己水平的项目5.&nbsp;有没有做过问卷调查相关的项目讲一讲6.&nbsp;又cue到简历里另外一个项目7.&nbsp;实验设计题:有客户要求要在智驾中看视频、听音乐,但这会影响驾驶时的安全性。请为如何满足这一需求设计一个实验8.&nbsp;反问环节🙌面试体验:面试官问得很细致,比如详细到问卷的信效度是如何保证的、为什么要设置问卷+访谈、访谈人数的量级怎么确定、问卷是怎么设计的……实验设计题直接把我送走了,当时比较紧张可能也没有完全理解题目意思,建议听题时可以拿张纸记录一下关键词,有不明白的地方也可以先和面试官确认,我唯一做对的点可能就是要求思考了一分钟。最后的反问环节,因为知道自己凉凉了,所以问了面试官之后可以怎么改进,面试官给了两点建议:(1)对简历里提到的项目要足够熟悉。我是因为简历里写到了一个小组项目,结果面试官问的那一块不是我负责的,导致我无法说出细节(2)对所应聘岗位所在的行业要有一定了解人生首面在捉襟见肘的情况下毫无悬念地挂掉了,居然当天下午还有一个腾讯群面,上午面完一整个心灰意冷脑壳疼,群面的时候纯纯去刷了个脸,明天回炉重造去了!&nbsp;&nbsp;
查看7道真题和解析 非技术面试记录
点赞 评论 收藏
分享
评论
点赞
4
分享

创作者周榜

更多
牛客网
牛客企业服务