数据库逻辑结构单元
0:数据库逻辑结构包括表空间,段,区,数据块
1、数据库在逻辑上是由多个表间组成的,表空间中存储的对象是段;
2、段,由区组成,比如数据段,索引段,和undo段;
3、区,是磁盘分配的最小单位,是物理上连续的块,一个extent的大小是1M,由64个页组成;
4、块(页),在MySQL中块就是页,是数据库中最小的I/O单位,同时也是内存数据缓冲区的单位,及数据文件存储空间单位,一个page的大小是16K(默认,一般也不会更改),innodb_page_size,其值应设置为操作系统块大小的整数倍。
1、表空间(tablespace)
表空间是数据库最大的逻辑结构,一个数据库在逻辑上由多个表空间组成,一个表空间只隶属于一个数据库。
1、一个表空间可以有多数据文件,但是一个数据文件只能属于一个表空间;
2、一个表空间就是一片磁盘区域,由一个或者多个磁盘文件组成,一个表空间可以容纳许多表、索引等。
2、段(segment)
一个表就是一个段,段可以分成:数据段、索引段、回滚段
1、数据段用来存储用户的数据,每个表都有一个对应的回滚段,其名称和数据表的名字相同;
2、索引段用来存储系统、用户的索引信息;
3、回滚段用来存储用户数据修改前的值,回退段与事务是一对多的关系,一个事务只能使用一个回退段,而一个回退段可存放一个或多个事务的回退数据。
3、区(extent)
区是磁盘空间分配的最小单位;
1、磁盘按区划分,每次至少分配一个区;
2、区存储于段中,它由连续的数据块组成。
4、块(data block)、页(page)
数据块是数据库中最小的数据组织单位与管理单位,是数据文件磁盘存储空间单位,也是数据库I/O 的最小单位。
5、数据行的格式
行的几个关注要素:
1、变长列字节列表
1>记录了各个变长列的长度情况,方便找到变长边界;
2>按照列顺序逆序放置
2、null列表
1>记录null的列的标志信息,因为null的列在行记录里不记录列值,方便找的时候知道哪列是空的
2>空列不占空间,可变长+null位,定位后面的列数据
3、行头标志
4、列数据:实际我们存放的数据
5、删除标记(deleted_flag):删除时对该行进行标记“deleted”,待purge
对于未提交事务的删除,其他可以继续select,因为没有真正的删除,也就不用劳烦undo了。
6、xid(6字节)、rollpointer(7字节)
如果没有定义主键的话,每行还会增加个rowid列(6字节),作为隐藏主键;
6、行列接
1、varchar可以很长,varchar(20):可以存放20个字符
gbk:一个字符占2个字节,因此实际上占用40个字节
utf8:一个字符大约占3个字节,因此实际上占用60个字节
2、blob列,主要用来存放图片、文件
建议:
1、对于大列,单独独立出去,采用垂直拆分表的方式来实现
2、不要出现一个表中存在多列、长列的情况,否则表的性能会很低下