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

  • Innodb存储结构
    • 页/块
      • 页的结构
      • 行的结构
  • 视图
  • 分区表

4.1 组织索引表

在InnoDB存储引擎中,表都是根据主键顺序组织存放的,存放的表称为索引组织表。在InnoDB存储引擎表中,每张表都有个主键,如果创建表时没有显示定义主键,InnoDB会按如下方式隐示选择或创建主键

  • 首先判断表中是否有非空的唯一索引。如果有,选其为主键(如果有多个,选第一个)
  • 如果不符合上述条件,InnoDB存储引擎会自动创建一个6字节大小的指针

4.2 Innodb存储结构

从Innodb的逻辑存储结构看,所有数据都被逻辑地存放在一个空间里,称为表空间(tablespace)。表空间由以下组成

  • 段(segment):对于Innodb来说可分为:数据段(叶子节点)+索引段(非叶子节点)+回滚段
  • 区(extent):任何情况下每个区的大小都为1MB。默认情况下,一个页16KB,一个区=64个连续页
  • 页 / 块(page/block):一般16K,常见的有:数据页+undo页+系统页+事务页...
  • 行(row):Compact和Redundant两种格式,后者多用于5.0之前

(1)页的结构

File Header 文件头表空间相关信息,38字节
  • 页的checksum
  • 该页在文件中的偏移量编号/第几页
  • 前后指针指向前面后面的页
  • 当前数据页最新被修改的LSN,用于redolog
  • 当前页面是哪种类型的数据页
Page Header 页头记录当前页的信息,56字节
  • 目录个数 / slot个数
  • 各种页中的地址指针
    • 数据头指针,指向数据页中的空闲空间的起始地址
    • 空闲地址头指针
    • 最后插入的位置指针
  • 页中记录的数量
  • 当前页在索引树中的位置
  • 索引ID,当前页属于哪个索引
Infimum + Supremum Records最大,最小记录
  • 边界:infimum<最小的key,supremum>最大的key
User Records用户记录
  • 记录所有数据,非连续物理地址。靠单项链表维护
Free Space空闲空间
Page Directory数据目录
  • 数据库把页加载进内存通过page directory进行二叉查找。
  • 里面存放地址偏移量,也叫slot槽
  • 每个页的目录个数在【4,8】,平均6条
File Trailer文件结尾信息,8字节
  • 检测页是否已经完整写入磁盘
  • checksum

(2)行的结构

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

格式:

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

4.2 视图

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

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

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

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


4.3 分区表

  • MYSQL数据库支持水平分区,并不支持垂直分区。
  • 并且是局部分区索引(数据和索引一起分区)而非全局分区(数据分区,索引仍在一起)
  • 如果表中存在主键或唯一索引:分区列必须是唯一索引的一个组成部分
  • 如果表中没有指定主键和唯一索引:任意列都能为分区列
  • 对于NULL值:RANGE会放入最左边的分区;LIST需要显示指出哪个分区放入NULL值,不然会报错;HASH和KEY会把NULL值的记录返回为0

(1)分区类型

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

2. LIST分区:离散区间

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

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

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

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

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

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

分区效率

分区并不是都有效的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值