mysql 表 区 块 页_MySQL表

2ff34e647e2e3cdfd8dca593e17d9b0a.png

索引组织表

索引组织表:在InnoDB存储引擎中,表都是根据主键顺序组织存放的,每个表都是有主键

_rowid可以显示表的主键,只能够查看单个列为主键的情况,并且为非空唯一索引。

InnoDB逻辑存储结构

表空间(tablespace)–>端(segment)—>区(extent)—>页(page)—>块(block)

表空间

表空间是InnoDB存储引擎逻辑结构的最高层,所有的数据都存放在表空间中。所有的数据都存放在这个表空间中。如果弃用了参数innodb_file_per_table,则每张表内的数据可以单独存放在一个表空间中。

表空间只存放数据、索引和插入缓冲Bitmap页,其他的数据(如回滚信息,插入缓冲索引页,系统事务信息,二次写缓冲)还是存放在原来的共享表空间中。

常见的段有数据段、索引段、回滚段。数据段为B+树的叶子节点,而索引段为B+树的非索引节点

由连续页组成的空间,在任何情况下每个区的大小都是1MB,在默认情况下页的大小为16KB,即一个区中一共有64个连续的页。

可以通过参数innodb_page_size来设置默认页的大小

页是InnoDB磁盘管理的最小单位,默认每个页的大小为16KB。

InnoDB存储引擎是面向列的,数据都是按照行来进行存放的,最多允许存放16KB/2-200行的记录,也就是7992行

InnoDB行记录格式

使用show table status like 'table_name'来查看当前表使用的行格式。

Compact行记录格式

MySQL5.0引入的,其设计的目的是高效地存储数据。

一个页中存放的行数据越多,其性能就越高。

在compact格式下,NULL值都不占用任何存储空间,不管是CHAR类型或者是VARCHAR类型

Redundant行记录格式

MySQL5.0之前的。

行溢出数据

BLOB可以不将数据放在溢出页面中,而且即使是VARCHAR列数据类型,依然有可能被存放为行溢出数据。通过实际测试,VARCHAR的类型的最大长度为65532.VARCHAR类型最大支持65535字节。

MySQL官方手册中定义的65535长度是指所有的VARCHAR列的长度总和,如果列的长度总和超过了这个长度,依然无法创建。

InnoDB存储引擎的页为16KB,也就是16384字节,在一般情况下,InnoDB存储引擎的数据都是存放在页类型为B-tree node中。但是当发生行溢出时,数据存放在页类型为Uncompress BLOB页中。

一个页存放数据,如果为两条数据的话,那么每条的最大的阈值为8098.

Compressed和Dynamic行记录格式

InnoDB1.0.x引入新的文件格式,Compressed和Dynamic

新的两种记录格式对于存放在BLOB中的数据采用完全的行溢出的方式。同时,存储在其中的行数据会以zlib的算法进行压缩,

CHAR的行结构存储

对于多字节字符编码的CHAR数据类型的存储,InnoDB存储引擎在内部将其视为变长字符类型,在变长长度列表中会记录CHAR数据类型的长度

CHAR(2)保存的是2个字符,不管是GBK,还是UTF-8,还是latin,都是2个字符,而不是2个字节。所以存储的字节是变化的。

InnoDB数据页结构

包括7个部分:File Header(文件头)

Page Header(页头)

infimum和Supremum Records

User Records(用户记录,即行记录)

Free Space(空闲空间)

Page Directory(页目录)

File Trailer(文件结尾信息)

Named File Formats机制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值