对MySQL的数据行和行溢出机制的理解
文 / @UTHEME
MySQL是一种关系型数据库管理系统,它的数据行有两种格式:Compact格式和Redundant格式。Compact格式是一种紧凑的行格式,可以比Redundant格式节约20%的存储空间。Compact从MySQL5.0引入,MySQL5.1之后,行格式默认设置成Compact。MySQL的单行最大能存储65535byte的数据,但是当varchar的长度超过65532byte时,会发生错误,因为数据页中每一行中都有隐藏列,所以将varchar的长度降低到65532byte即可成功创建表。Compact格式的实现思路是,当列的类型为VARCHAR、VARBINARY、BLOB、TEXT时,该列超过768byte的数据放到其他数据页中去,能有效防止单个数据页存放的行记录过少,导致IO飙升的窘境。如果一个数据页存储的行超过了65532byte,会发生行溢出。当varchar列长度达到768byte后,会将该列的前768byte当作prefix存放在行中,多出来的数据溢出存放到溢出页中,然后通过一个偏移量指针将两者关联起来,这就是行溢出机制。MySQL使用的是B+Tree的聚簇索引,在这棵B+Tree中非叶子节点是只存索引不存数据,叶子节点中存储着真实的数据。同时叶子结点指向数据页。当单行存不下的时候,不能存在两个数据页中,因为MySQL想让一个数据页中能存放更多的数据行,至少也得要存放两行数据,否则就失去了B+Tree的意义,退化成一个低效的链表。

相关文章
-
MySQL Workbench怎么建立数据库(附:sql语句创建数据库方法) 2023-07-20 12:22:29
-
MySQL Workbench是什么?(附:如何设置中文教程) 2023-07-20 11:42:31
-
一起聊聊MySQL主从延时的处理方案 2023-05-14 07:00:03
-
mysql怎么将查询结果赋给变量 2023-05-14 07:00:03
-
mysql驱动是什么 2023-05-14 07:00:03
-
qt5.8如何连接mysql 2023-05-14 07:00:03
-
MySQL 语法整理介绍 2023-05-14 07:00:03
-
mysql修改表结构的语句是什么 2023-05-14 07:00:03
-
mysql乐观锁和悲观锁的区别是什么 2023-05-14 07:00:03
-
mysql查询怎么区分大小写 2023-05-14 07:00:02