MySQL技术内幕Charpter4表

一、逻辑存储结构

逻辑上所有数据都被存在表空间内,默认存放在共享表空间中,启用innodb_file_per_table则每张表单独一个表空间

MySQL技术内幕Charpter4表

1.表空间

单独表空间中只存放数据,索引,插入缓冲Bitmap,其他数据还是在共享表空间

2.segment

innodb中数据即索引,索引即数据,数据段即B+树叶节点,索引树即非叶节点

3.extent

区由连续页组成,默认1M,64个页

每个段开始时先用32个碎片页存放数据,使用完后才是64个连续页的申请

4.页

innodb最小磁盘管理单位

5.行

 

二、行记录格式

innodb提供compact和redundant方式记录行数据,后者为了兼容之前的版本而保留

页内部是通过一种链表结构串联各行记录,一行最多支撑1023个列

varchar列长度总和大为65535

B+树索引并不能找到一条记录,只能找到该记录的页,数据库把页载人内存,通过page directory进行二叉查找

 

三、约束

关系型数据库通过约束机制来确保数据的完整性,主要包括:实体完整性(只有一个主键)、域完整性(每列满足特定条件)、参照完整性(确保两张表之间关系)

MySQL向NOT NULL的字段插入一个NULL值,会将其更改为0再插入,通过strict_trans_tables对输入值的合法性进行约束

不支持check约束,可通过ENUM与SET解决部分

通过触发器,用户可以实现MySQL数据库不支持的一些特性,如check、物化视图、高级复制、审计等

 

MySQL技术内幕Charpter4表

四、分区表

从逻辑上只有一个表或索引,但在物理上表或索引可能有多个物理分区组成,MySQL分区是局部分区索引,分区中既存放数据,也存放索引。

分区类型包括:range、list、hash、columns(可为非整型)、key(MySQL提供函数)

range与list下再进行hash或key的子分区