MySQL表介绍

MySQL InnoDB表介绍

一、索引组织表

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

(1)、判断表是否有非空唯一索引,如果有,则该字段为主键。如果有多个非空唯一索引,则选择第一个定义的非空索引字段作为主键(定义索引的顺序,不是定义字段的顺序)

(2)、如果不符合上述条件,InnoDB自动创建一个6字节大小的指针。

二、InnoDB逻辑存储结构

 从InnoDB得逻辑存储结构看,索引数据放在一个空间中,称作表空间。表空间又由段(segment),区(extend),页(page)组成。InooDB的逻辑存储结构大致如下图所示:

1、表空间

表空间可以看作InnoDB存储引擎逻辑存储结构的最高层,所有数据都放在表空间中。5.7默认启用参数innodb_file_per_table。每张表数据放在一个单独的表空间里边,如果关闭该参数,所有数据放在一个表空间ibdata1内。

如果启用innodb_file_per_table该参数,每张表的表空间存放的是数据,索引,插入缓冲Bitmap页。其他类的数据,如回滚(undo)信息,插入缓冲索引页,系统事务信息,二次写缓冲等还是放在原来的共享表空间内。

2、段

表空间是由各个段组成的,常见有数据段、索引段、回滚段等。因为InnoDB引擎表是索引组织的,因此数据即索引,索引即数据。那么数据段即为B+树的叶子节点(图中的Leaf node segment),索引段为B+树的非索引节点(图中的Non-leaf node segment).回滚段比较特殊。

3、区

区是由连续页组成的空间,在任何区的情况下每个区大小为1M。为了保证区中页的连续性,InnoDB一次从磁盘申请4~5个区,默认情况下,InnoDB引擎页的大小为16KB,即一个区一共有64个连续页。

4、页

页是InnoDB磁盘管理的最小单位,默认每个也大小是16k。可以通过innodb_page_size修改页大小。设置完成,则表中所有页都为innodb_page_size,不可修改。除非通过mysqldump导出导入重建库。

常见的页类型有:

(1)、数据页(B-tree Node)

(2)、undo页(undo Log Page)

(3)、系统页(System Page)

(4)、事务数据页(Transaction System Page)

(5)、插入缓冲位图页(Insert Buffer Bitmap)

(6)、插入缓冲空闲列表页(Insert Buffer Free List)

(7)、未压缩的二进制大对象页(Uncompressed BLOB Page)

(8)、压缩的二进制大对象页(compressed BLOB Page)

5、行

InnoDB引擎数据是按行进行存放的。每个页存放的行记录也是有定义的。最多允许存放16KB/2 -200,即最多7992行记录

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

sqlserver2005创建唯一约束的方法

对于一个表中非主键列的指定列,唯一(UNIQUE约束|:强制非主键上的实体完整性的约束。UNIQUE约束确保未输入重复值,并创建一个索引以增强性能。)约束确保不会输入重复的值。例如,在employee表中emp\_id列是主键,可以定义一个唯一约束来要求表中社会安全号码(ssn)列的项是唯一的。在数据库关系图中,可以使用"索引/键"属性页创建、

MySQL索引的索引长度问题

MySQL的每个单表中所创建的索引长度是有限制的,且对不同存储引擎下的表有不同的限制。在MyISAM表中,创建组合索引时,创建的索引长度不能超过1000,注意这里索引的长度的计算是根据表字段设定的长度来标量的,例如:createtabletest(idint,name1varchar(300),name2varchar(300),nam

MySql 面试开发技术点汇总

表结构设计1、为什么一定要设一个主键?答:因为你不设主键的情况下,innodb也会帮你生成一个隐藏列,作为自增主键。所以啦,反正都要生成一个主键,那你还不如自己指定一个主键,在有些情况下,就能显式的用上主键索引,提高查询效率!2、你们主键是用自增还是UUID?答:肯定答自增啊。innod