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 |
(2)行的结构
Compact:5.0后引入,压缩格式便于让一个页存放更多行数据
格式:
Redundant:5.0之前的存储方式,现在还支持该格式是为了兼容
4.2 视图
本质上是一种虚拟表,在物理上是不存在的。在具体引用视图时(本质是定义好的查询)动态生成视图。
-
视图的建立和删除不影响基本表。
-
对视图内容的更新(添加,删除和修改)直接影响基本表。
作用:看起来方便(简化操作)+ 数据安全
4.3 分区表
MYSQL数据库支持水平分区,并不支持垂直分区。
并且是局部分区索引(数据和索引一起分区)而非全局分区(数据分区,索引仍在一起)。
如果表中存在主键或唯一索引:分区列必须是唯一索引的一个组成部分
如果表中没有指定主键和唯一索引:任意列都能为分区列
对于NULL值:RANGE会放入最左边的分区;LIST需要显示指出哪个分区放入NULL值,不然会报错;HASH和KEY会把NULL值的记录返回为0
1. RANGE分区:一个连续区间
2. LIST分区:离散区间
注:在INSERT插入多个行数据遇到未分区的值时,MyISAM会将之前的行数据都插入成功,之后的不会插入;Innodb因为存在事务,因此没有任何数据插入
3. HASH分区:用户自定义表达式
注:还有LINEAR HASH,增加删除合并拆分更高效,但数据分布没有那么均衡
4. KEY分区:Mysql提供的哈希函数,不需要自己提供函数
5. COLUMNS分区:针对非整型的数据
6. 子分区:MYsql允许在RANGE和LIST的分区上再进行HASH或KEY的子分区
分区并不是都有效的。