InnoDB存储引擎表
2018-02-21 13:42
316 查看
简单来说,表是关于特定实体的数据集合,这也是关系型数据库模型的核心
在InnoDB存储引擎表中,每张表都有个主键(primary key),如果在创建时没有显式得定义主键,则会按如下方式选择主键:
首先判断表中是否存在非空的唯一索引(unique not null),如果有,该列即为主键
如果不满足上面的条件,InnoDB存储引擎会自动创建一个6字节大小的指针。
select _rowid from student;
_rowid显示表的主键,但只能用于查看单个列为主键的情况。
所有的数据都被逻辑的放在一个表空间中,表空间由段、区、页组成。
数据段即为B+树的叶子节点,索引段即为B+树的非叶子节点。
在InnoDB存储引擎中,对段的管理都是由引擎自身所完成的。
为了保证区中页的连续性,存储引擎一次性从磁盘中申请4-5个区,默认情况下,InnoDB存储引擎页的大小为16LKB,即一个区中一共有64个连续的页。
InnoDB1.0版本开始引入压缩页。通过参数KEY_BLOCK_SIZE设置页的大小为2K,4K,8K
InnoDB1.2.x版本新增参数innodb_page_size,可以设定默认页的大小为4K,8K,但是页中的数据不是压缩的。
不管页的大小如何变化,区的大小永远是都是1M
这里有个问题:在用户启用了参数innodb_file_per_table后,创建的表的默认大小为96KB。区中是64个连续的页,创建的表的大小至少是1MB才对啊?
这是因为在每个段开始的时候,先用32个碎片页来存放数据,在使用完后才是64个连续页的申请。这样做的目的是,对于一些小表,或者是undo这类的段,可以在开始时申请较少的空间,节省磁盘容量的开销。
默认大小是16KB,可以通过参数innodb_page_size进行设定。有一点要注意,通过这个参数改变设定后,所有表中的页的大小都为innodb_page_size,不可以再对其进行再次修改,除非通过mysqldump导入导出操作来产生新的库。
常见的页类型:
数据页
undo页
系统页
事务数据页
插入缓冲位图页
插入缓冲空闲列表页
未压缩的二进制大对象页
压缩的二进制大对象页
每个页存放的行记录是有硬性定义的。最多允许存放16KB/2-200行的记录,即7992行记录。
索引组织表
在InnoDB存储引擎中,表都是根据主键顺序组织存放的,这种存储方式的表称为索引组织表。在InnoDB存储引擎表中,每张表都有个主键(primary key),如果在创建时没有显式得定义主键,则会按如下方式选择主键:
首先判断表中是否存在非空的唯一索引(unique not null),如果有,该列即为主键
如果不满足上面的条件,InnoDB存储引擎会自动创建一个6字节大小的指针。
select _rowid from student;
_rowid显示表的主键,但只能用于查看单个列为主键的情况。
InnoDB的逻辑存储结构
所有的数据都被逻辑的放在一个表空间中,表空间由段、区、页组成。
表空间
表空间分为共享空间和独立空间,分别通过参数innodb_data_file_path和参数innodb_file_per_table来管理设定。段
表空间是由各个段组成的,常见的段有数据段、索引段、回滚段等。数据段即为B+树的叶子节点,索引段即为B+树的非叶子节点。
在InnoDB存储引擎中,对段的管理都是由引擎自身所完成的。
区
区是由连续页组成的空间。在任何情况下每个区的大小都是1MB。为了保证区中页的连续性,存储引擎一次性从磁盘中申请4-5个区,默认情况下,InnoDB存储引擎页的大小为16LKB,即一个区中一共有64个连续的页。
InnoDB1.0版本开始引入压缩页。通过参数KEY_BLOCK_SIZE设置页的大小为2K,4K,8K
InnoDB1.2.x版本新增参数innodb_page_size,可以设定默认页的大小为4K,8K,但是页中的数据不是压缩的。
不管页的大小如何变化,区的大小永远是都是1M
这里有个问题:在用户启用了参数innodb_file_per_table后,创建的表的默认大小为96KB。区中是64个连续的页,创建的表的大小至少是1MB才对啊?
这是因为在每个段开始的时候,先用32个碎片页来存放数据,在使用完后才是64个连续页的申请。这样做的目的是,对于一些小表,或者是undo这类的段,可以在开始时申请较少的空间,节省磁盘容量的开销。
页
页是磁盘管理的最小单位。默认大小是16KB,可以通过参数innodb_page_size进行设定。有一点要注意,通过这个参数改变设定后,所有表中的页的大小都为innodb_page_size,不可以再对其进行再次修改,除非通过mysqldump导入导出操作来产生新的库。
常见的页类型:
数据页
undo页
系统页
事务数据页
插入缓冲位图页
插入缓冲空闲列表页
未压缩的二进制大对象页
压缩的二进制大对象页
行
数据是按行存储的。每个页存放的行记录是有硬性定义的。最多允许存放16KB/2-200行的记录,即7992行记录。
相关文章推荐
- MySQL InnoDB 存储引擎 count加速
- MySQL的两个存储引擎--MyISAM和InnoDB
- 【innodb存储引擎加强版】XtraDB存储引擎
- MySQL Study之--MySQL innodb引擎表存储分析
- Linux修改MySql默认存储引擎为InnoDB
- Mysql NDB and InnoDB 存储引擎区别
- MYSQL中常用的存储引擎------MyISAM和InnoDB
- innodb存储引擎之综述
- mysql的innodb存储引擎(一)
- innodb存储引擎
- mysql的innodb存储引擎(四)
- MySQL数据库MyISAM和InnoDB存储引擎的比较
- mysql存储引擎的种类与区别(innodb与myisam)
- mysql修改表的存储引擎(myisam<=>innodb)
- MySQL数据库性能优化之存储引擎选择(MyISAM、InnoDB、NDBCluster)
- MySQL存储引擎中的MyISAM和InnoDB
- innodb和myisam存储引擎插入速度
- MySQL存储引擎MyISAM与InnoDB的主要区别对比
- MySQL存储引擎中的MyISAM和InnoDB
- MySQL存储引擎--细说MyISAM与InnoDB区别