Mysql InnoDB表结构
索引组织表
在InnoDB存储引擎中,表都是根据主键顺序组织存放的,这种存储方式的表称为索引组织表(index organized table).在InnoDB存储引擎表中,每张表都有个主键(Primary Key),如果在创建表时没有显式地定义主键,则InnoDB存储引擎会按如下方式选择或创建主键
1:首先判断表中是否有非空的唯一索引,如果有,则该列即为主键
2:如果不符合上述条件,InnoDB存储引擎自动创建一个6字节大小的指针
当表中有多个非空唯一索引时,InnoDB存储引擎将选择建表时第一个定义的非空唯一索引为主键。
InnoDB逻辑存储结构:
从InnoDB存储引擎的逻辑存储结构看,所有数据都被逻辑地存放在一个空间中,称之为表空间(tablespace).表空间又由段(segment),区(extent)、页(page)组成。InnoDB存储引擎的逻辑存储结构大致如图所示。
表空间:
表空间可以看做是InnoDB存储引擎逻辑结构的最高层,所有的数据都存放在表空间中。在默认情况下InnoDB存储引擎有一个共享表空间ibdata1,即所有数据都存放在这个表空间内,如果用户启用了参数innodb_file_per_table,则每张表内的数据可以单独放到一个表空间内。如果启用了innodb_file_per_table的参数,需要注意的是每张表的表空间内存放的只是数据、索引和插入缓冲Bitmap页,其他类的数据如回滚(undo)信息,插入缓冲索引页、系统事务信息,二次写缓冲等还是存放在原来的共享表空间内
段:
表空间是由各个段组成的,常见的段有数据段、索引段、回滚段等。因为InnoDB存储引擎表是索引组织的,因此数据即索引,索引即数据。数据段为B+树的叶子节点,索引段即为B+树的非索引节点。在InnoDB存储引擎中,对段的管理都是由引擎自身所完成。
区:
区是由连续页组成的空间,在任何情况下每个区的大小都为1MB。为了保证区中页的连续性,InnoDB存储引擎一次从磁盘申请4-5个区。在默认情况下,InnoDB存储引擎页的大小为16KB,即一个区中一共有64个连续的页。
在用户启用了参数innodb_file_per_table后,创建的表默认大小是96KB。区中是64个连续的页,创建的表大小至少是1MB才对。其实这是因为在每个段开始时,先用32个页大小的碎片页来存放数据,在使用完这些页之后才是64个连续页的申请。这样做的目的是,对于一些小表,或者是undo这类的段,可以在开始时申请较少的空间,节省磁盘容量的开销。
最新文章
- CSS 页面顶部阴影和给浏览器强制加上滚动条
- Ansible学习笔记
- HTML5的学习--performance获取加载时间的工具
- 微信公众平台C# SDK:Senparc.Weixin.MP.dll
- Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别
- EMS电子面单接口对接使用-免费版
- sql2000
- Valve开源了Direct3D到OpenGL的转译层,方便开发者迁移游戏到Linux(面向游戏玩家的六款最佳 Linux 发行版)
- C++中的string类(1)
- hdu 5053 the Sum of Cube(上海网络赛)
- 团队作业8——第二次项目冲刺(Beta阶段)Day4--5.21
- PhpStorm php配置环境
- [ 随手记 4 ]C/C++ 模板(Template)使用/重载区别
- MySQL InnoDB 事务实现过程相关内容的概述
- Crane (POJ 2991)
- Mysql数据库异常
- 线段树模板hdu 1754:I Hate It
- Redis 中 5 种数据结构的使用场景介绍
- EntityFramework中常用的数据删除方式
- Django中的View视图讲解
热门文章
- PHP关闭notice级别报错信息
- POJ 2392 Space Elevator(贪心+多重背包)
- RandomForest 调参
- MVC Controller return 格式之JsonResult、ContentResult、RedirectResult……
- NIO之直接缓冲区与非直接缓冲区
- Atitit. Derby的使用总结attilax
- Android中Intent传递类对象的方法一(Serializable)
- 从头认识Spring-3.8 简单的AOP日志实现(注解版)-扩展添加检查订单功能,以便记录并检測输入的參数
- C++语言基础(1)-命名空间
- wp8 各种启动器