第四章:表

InnoDB引擎中,表根据主键顺序存放,主键可通过显示创建、非空唯一索引转换或自动创建。数据存储在表空间中,包括段、区和页。每个页大小16KB,1MB为一个区,由64个连续页组成。行记录有多种格式,如Compact和Redundant,行溢出数据存储在页外。分区表支持水平分区,如Range和List分区,用于优化管理和查询性能。约束确保数据完整性,视图提供虚拟表功能。
摘要由CSDN通过智能技术生成

索引组织表

定义:InnoDB引擎中表都是根据逐渐顺序组织存放的。

主键创建:

①显示创建

②将非空唯一索引变成主键(若出现多个,,将第一个当主键)

③自动创建

InnoDB逻辑存储结构

表空间:所有数据都放在一个空间中。

表空间可分为段,区,页。

表空间

所有数据都放在共享表空间中。

独立表空间中存放的是数据,索引,插入缓冲页。其他数据还是在共享表空间中。

共享表空间扩大后不能收缩回去,会标记那些空间为可用空间。

数据段,索引段,回滚段。

数据段为B+树的叶子节点,索引段是B+树的非索引节点。

区是连续页构成的空间,大小为1MB。一个区中有64个连续的页。

在每个段开始时,先使用32个页大小的碎片页,用完之后才是64个连续页的申请,节省磁盘容量的开销。

页是磁盘管理的最小段位。默认大小16kb。

页的分类:

 行

数据是按行进行存放的。

InnoDB行记录格式

Compact和Redundant两种行格式。

默认为Compact。

Compact行记录格式

一个页中存放的行数据越多,代表其性能越好。

 记录头信息

 

 页内是通过单向链表串联各个行记录的。

Redundant行记录格式

行溢出数据

将一条记录中的某些数据存储在真正的数据页面之外。

Compressed和Dynamic行记录格式

采用了完全行记录的方式

CHAR的行结构存储

varchar是存储变长长度的字符类型,char一般是存储固定长度的字符类型。

在不同的字符集下,char类型列内部·存储的可能不是定长的数据。(如在多字节的字符编码中)。

InnoDB数据页结构

 

 FIle Header

记录页的头信息。

Page header

记录数据页的状态信息。

Infimum和Supremum Record

虚拟的行记录,用来限定记录的边界。

User Record和Free Space

前者存储用户信息,后者是空闲空间。

Page Directory

存放的是记录的相对位置。

记录指针称为槽,一个槽中可能有多个记录。页目录先通过二分法找到对应的槽,再通过next_record遍历该槽中的各个记录。

File Trailer

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

默认下,每读入一个页就会检测页是否完整。

Nameed FIile Formats机制

兼容不同的文件格式

约束

区别:

关系型数据库系统本身能保证存储数据的完整性,靠约束机制。

而文件系统需要程序端进行控制。

数据完整性三种形式:

①实体完整性保证表中有一个主键。

②域完整性保证每列的值满足特定的条件。

③参数完整性保证两张表的关系。

几种约束:

 约束创建和查找

表建立时就进行约束定义;利用命令进行创建约束。

约束和索引的区别

对错误数据的约束

数据库本身未对数据的正确性进行约束。

视图

它是一个命名的虚表,视图中的数据没有实际的物理存储。

分区表

分区是指将一个表或索引分为多个更小,易于管理的区域。

MySQL支持水平分区(将不同行的记录分配到不同的物理文件中)

MySQL是局部区分索引,即一个分区中即放索引也放数据。

Range分区

行数据以给定连续区间的列值被放入分区。分区后,表不再是.ibd文件组成了。

该类型分区主要用于日期列的分区。

LIst分区

类似于Range,但是分区列的值是散列的。

hash分区

将数据均匀分布到各个分区中。

Key分区

类似于hash分区,但是Key分区使用MySQL数据库提供的函数进行分区。而hash分区是使用用户自定义的函数。

columns分区

 子分区

在分区的基础上再分区。在range和List分区上进行hash和key分区。

分区中的null值

MySQL数据库的分区将null值视为小于任何值的一个非null值,将其放在最左边的分区。

分区和性能

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值