MYSQL复习——第四章:表(Innodb存储结构+视图+分区表)

4.1 Innodb存储结构

  • 页/块
    • 页的结构
    • 行的结构

4.2 视图

4.3 分区表

4.1 Innodb存储结构

段:对于Innodb来说可分为:数据段(叶子节点)+索引段(非叶子节点)+回滚段

区:任何情况下每个区的大小都为1MB。默认情况下,一个页16KB,一个区=64个连续页

页:常见的有:数据页+undo页+系统页+事务页...

行:Compact和Redundant两种格式,后者多用于5.0之前

(1)页的结构

File Header 文件头 表空间相关信息,38字节

1.页的checksum

2.该页在文件中的偏移量编号/第几页

3.前后指针指向前面后面的页

4.当前数据页最新被修改的LSN,用于redolog

5.当前页面是哪种类型的数据页

Page Header 页头 记录当前页的信息,56字节

1.目录个数/slot个数

2.各种页中的地址指针

  • 数据头指针,指向数据页中的空闲空间的起始地址
  • 空闲地址头指针
  • 最后插入的位置指针

3.页中记录的数量

4.当前页在索引树中的位置

5.索引ID,当前页属于哪个索引

Infimum + Supremum Records 最大,最小记录 边界:infimum<最小的key,supremum>最大的key
User Records 用户记录 记录所有数据,非连续物理地址。靠单项链表维护
Free Space 空闲空间  
Page Directory 数据目录

数据库把页加载进内存通过page directory进行二叉查找。

里面存放地址偏移量,也叫slot槽

每个页的目录个数在【4,8】,平均6条

File Trailer 文件结尾信息,8字节

检测页是否已经完整写入磁盘

checksum

MYSQL复习——第四章:表(Innodb存储结构+视图+分区表)MYSQL复习——第四章:表(Innodb存储结构+视图+分区表)

(2)行的结构

Compact:5.0后引入,压缩格式便于让一个页存放更多行数据

格式:MYSQL复习——第四章:表(Innodb存储结构+视图+分区表)

Redundant:5.0之前的存储方式,现在还支持该格式是为了兼容

4.2 视图

本质上是一种虚拟表,在物理上是不存在的。在具体引用视图时(本质是定义好的查询)动态生成视图。

  • 视图的建立和删除不影响基本表。

  • 对视图内容的更新(添加,删除和修改)直接影响基本表。

作用:看起来方便(简化操作)+ 数据安全

4.3 分区表

MYSQL数据库支持水平分区,并不支持垂直分区。

并且是局部分区索引(数据和索引一起分区)而非全局分区(数据分区,索引仍在一起)。

如果表中存在主键或唯一索引:分区列必须是唯一索引的一个组成部分

如果表中没有指定主键和唯一索引:任意列都能为分区列

对于NULL值:RANGE会放入最左边的分区;LIST需要显示指出哪个分区放入NULL值,不然会报错;HASH和KEY会把NULL值的记录返回为0

(1)分区类型

1. RANGE分区:一个连续区间

MYSQL复习——第四章:表(Innodb存储结构+视图+分区表)

2. LIST分区:离散区间

注:在INSERT插入多个行数据遇到未分区的值时,MyISAM会将之前的行数据都插入成功,之后的不会插入;Innodb因为存在事务,因此没有任何数据插入

MYSQL复习——第四章:表(Innodb存储结构+视图+分区表)

3. HASH分区:用户自定义表达式

注:还有LINEAR HASH,增加删除合并拆分更高效,但数据分布没有那么均衡

MYSQL复习——第四章:表(Innodb存储结构+视图+分区表)

4. KEY分区:Mysql提供的哈希函数,不需要自己提供函数

MYSQL复习——第四章:表(Innodb存储结构+视图+分区表)

5. COLUMNS分区:针对非整型的数据

MYSQL复习——第四章:表(Innodb存储结构+视图+分区表)

MYSQL复习——第四章:表(Innodb存储结构+视图+分区表)

6. 子分区:MYsql允许在RANGE和LIST的分区上再进行HASH或KEY的子分区

分区效率

分区并不是都有效的。

MYSQL复习——第四章:表(Innodb存储结构+视图+分区表)