MySQL数据存放相关问题?

MySQL 的数据存放在哪个文件?

MySQL 的数据存放在哪个文件?

存放在idb文件中

表空间文件的结构是怎么样的?

段-区-页-行,四个等级

行:保存数据的最小单位

页:mysql按照页读取数据,默认页大小为16KB

区:

B+ 树中每一层都是通过双向链表连接起来的,如果是以页为单位来分配存储空间,那么链表中相邻的两个页之间的物理位置并不是连续的,可能离得非常远,那么磁盘查询时就会有大量的随机I/O,随机 I/O 是非常慢的。

用于innodb管理数据,默认区大小为1MB,可以存储连续的64个页

段:

段一般分为数据段、索引段和回滚段等。

  • 索引段:存放 B + 树的非叶子节点的区的集合;
  • 数据段:存放 B + 树的叶子节点的区的集合;
  • 回滚段:存放的是回滚数据的区的集合,之前讲事务隔离 (opens new window)的时候就介绍到了 MVCC 利用了回滚段实现了多版本查询数据。

InnoDB 行格式有哪些?

InnoDB 提供了 4 种行格式,分别是 Redundant、Compact、Dynamic和 Compressed 行格式。

Mysql5.7之后默认使用Compredded格式

COMPACT 行格式长什么样?

|变长字段长度列表|NULL列表|头信息|row_id|trx_id|roll_ptr|列1值|列2值|...|列n值

前三者都是记录的额外信息,后面的才是记录真实信息

记录的额外信息

分为三个部分:不定长字段长度列表,null值列表,头信息

不定长字段列表

保存着行的所有不定长字段占用字节大小,例如varcahr,text的长度都是保存在这里。

列表的信息和字段顺序相反,例如 有两个字段name,phone可以为空。

不定长字段列表保存的顺序从左到右是phone,name。

为什么「变长字段长度列表」的信息要按照逆序存放?

可以提交cpu缓存的命中率,并且记录头信息指向的是下一个记录的指针,从记录头信息往左读就是第一行数据的不定长长度,往右读是第一行的真实数据,比较方便

每个数据库表的行格式都有「变长字段字节数列表」吗?

不是,如果没有不定长字段就没有这个列表,节省空间

NULL 值列表

将存储着null值的字段保存到null值列表,也是按照字段顺序逆序排放,用01区分是否存放null

每个数据库表的行格式都有「NULL 值列表」吗?

不是,每个字段都不是not null的时候就不会有了。null值列表至少占用1字节

「NULL 值列表」是固定 1 字节空间吗?如果这样的话,一条记录有 9 个字段值都是 NULL,这时候怎么表示?

不是固定的,9个字段是null会创建2个字节的列表,一次类推

记录头信息

delete_mask :表明这行是否被删除

next_record:保存着下一条数据的记录头next_record位置

record_type:表明当前记录的类型,0普通记录,1b+树非叶子节点,2最小记录,3最大记录

记录的真实数据

除了自己定义的,还有三个隐藏字段:row_id,trx_id,roll_ptr

  • row_id:没有指定组件或者唯一约束的时候,作为主键保存,不是必须存在,占6字节

  • trx_id:记录着这个数据是由那个事务生成的,必须存在,占6字节

  • roll_ptr:记录上一个版本的指针,必须存在,占7字节

varchar(n) 中 n 最大取值为多少?

mysql规定,除了text,和blob不计入大小,每行最大65535字节,这个大小也包括了NULL 值列表和不定长字段长度列表,但是不包括三个隐藏字段

varchar的大小和字符集有关,如果是ascii,一个字符占一个字节。

如果n要最大,理想情况只有一个字段。

如果字段 not null,最大为65533,需要两个字节记录大小

如果字段可以为null ,最大65532,需要两个字节记录大小,一个字节记录null

行溢出后,MySQL 是怎么处理的?

记录的真实数据只会保存一部分,剩下放在溢出页中,真实数据处使用20字节保存着指向溢出页的地址

posted @   xiuer211  阅读(115)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示