MySQL技术内幕Charpter4表
一、逻辑存储结构
逻辑上所有数据都被存在表空间内,默认存放在共享表空间中,启用innodb_file_per_table则每张表单独一个表空间
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分区是局部分区索引,分区中既存放数据,也存放索引。
分区类型包括:range、list、hash、columns(可为非整型)、key(MySQL提供函数)
range与list下再进行hash或key的子分区