Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > MYSQL COMPACT行格式

MYSQL中COMPACT行格式的具体使用

作者:小周同志啊

compact行格式是mysql中InnoDB存储引擎存储数据使用的一种行格式,本文主要介绍了MYSQL中COMPACT行格式的具体使用,具有一定的参考价值,感兴趣的可以了解一下

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

当我们输入下面的命令之后:就可以看到 /var/lib/mysql

mysql> SHOW VARIABLES LIKE 'datadir';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| datadir       | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.00 sec)

创建一个数据库时, 都会在 /var/lib/mysql/ 目录里面创建一个以 database 为名的目录

在数据库中创建表时

[root@root]#ls /var/lib/mysql/test
db.opt  
t_test.frm  
t_test.ibd

总结(回答问题): MySQL 5.6.6之后,mysql的数据默认存放到 .ibd后缀的文件(独占表空间文件) 中。

InnoDB 行格式有哪些?

InnoDB 提供了 4 种行格式:Redundant(冗余)、Compact(紧凑)、Dynamic(动态) 和 Compressed(压缩行)

其中 Dynamic 和 Compressed 与 Compact格式特别像

 COMPACT 行格式长什么样?

(结构如图:来自小林coding)

记录的额外信息

记录的额外信息包含 3 个部分:变长字段长度列表、NULL 值列表、记录头信息。

1. 变长字段长度列表

表的一行数据中,找出类型为 varchar的字段,并将其倒序存储在 变长字段长度列表。

比如:表的一行数据中,varchar字段name为11,varchar字段phone是123。

注意:

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

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

2. NULL 值列表

如果存在允许 NULL 值的列,则每个列对应一个二进制位(bit),二进制位按照列的顺序逆序排列。

注意:

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

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

记录的真实数据

 1. row_id

如果我们建表的时候指定了主键或者唯一约束列,那么就没有 row_id 隐藏字段了。如果既没有指定主键,又没有唯一约束,那么 InnoDB 就会为记录添加 row_id 隐藏字段。row_id不是必需的,占用 6 个字节。

 2. trx_id

事务id,表示这个数据是由哪个事务生成的。 trx_id是必需的,占用 6 个字节。

 3. roll_pointer

这条记录上一个版本的指针。roll_pointer 是必需的,占用 7 个字节。

到此这篇关于MYSQL中COMPACT行格式的具体使用的文章就介绍到这了,更多相关MYSQL COMPACT行格式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文