如下所示,innodb的存储结构包含:表空间,段,区,页(块),行

innodb存储结构优化的标准是:一个页里面存放的行数越多,其性能越高

表空间:零散页+段

独立表空间存放的是:数据、索引、插入缓冲。

共享表空间存放的是:撤销信息、系统事务信息、二次写缓冲。共享表空间扩展后就不会回缩了。

段:存储引擎自动管理

区:由64个连续的页组成,每个页大小为16K(每个区大小为1M),对于大的数据段,innodb存储引擎每次最多可以申请4个  区,以此来保证数据的顺序性能。在每个段开始都有32个页大小的碎片页用来存放数据,当这些页使用完之后才64个连续页申请

页:innodb磁盘管理的最小单位。

行:innodb存储引擎是面向行的。每个页存放的行也有硬性限制:最多允许存放16K/2-200行(7992行)的记录。

Antelope文件格式

compact行记录格式:

变长字段长度列表:1-2字节,如果变长字段总和小于256个字符占用一个字节,大于255个字节小于65535个字节用2个字节存储,因为2的16次方=65536,所以一个表的变长字段列总和不能超过65535。

NULL标志位:标志该行中哪些列为空,用1表示。

记录头信息:用5个字节表示

列数据:(额外包含,事务id列,回滚指针列,如果没有主键的话还会有个6字节的rowid),如果某列数据为NUll则除了NULL标志位外不占用任何额外的空间。

Rebundant行记录格式:

字段长度偏移列表:1-2字节

记录头信息:6字节

n_fileds表示列的数量,因为只有10位,所以一个Redundant格式的表的列数不能超过1024列

对于varchar类型的null值不占用空间,但是对于char类型的null值需要占用空间

行溢出:

一个页中至少应该有两行记录,如果当前页中只能存放一条记录,那么innodb会自动将行数据存放在溢出页中

Barracuda文件格式

行溢出:

小实验:

小编做了个关于innodb表最大支持多少列的实验,发现无论用什么文件格式(DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT)文件的列数都不能超过1017列

innodb的存储结构的更多相关文章

  1. InnoDB 逻辑存储结构

    本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/80 如果创建表时没有显示的定义主键,mysql会按如下方式创建主 ...

  2. MySQL InnoDB 逻辑存储结构

    MySQL InnoDB 逻辑存储结构 从InnoDB存储引擎的逻辑结构看,所有数据都被逻辑地存放在一个空间内,称为表空间,而表空间由段(sengment).区(extent).页(page)组成.p ...

  3. MYSQL Innodb逻辑存储结构

    转载于网络 这几天在读<MySQL技术内幕 InnoDB存储引擎>,对 Innodb逻辑存储结构有了些了解,顺便也记录一下: 从InnoDB存储引擎的逻辑存储结构看,所有数据都被逻辑地存放 ...

  4. Innodb页面存储结构-2

    上一篇<Innodb页面存储结构-1>介绍了Innodb页面存储的总体结构,本文会介绍页面的详细内容,主要包括页头.页尾和记录的详细格式. 学习数据结构时都说程序等于数据结构+算法,而在i ...

  5. InnoDB逻辑存储结构

    从InnoDB存储引擎的逻辑存储结构看,所有数据都被逻辑地存放在一个空间中,称之为表空间(tablespace).表空间又由段(segment).区(extent).页(page)组成.页在一些文档中 ...

  6. InnoDB表存储结构及keyring加密

    ibdata是InnoDB最重要的系统表空间文件,它记录了InnoDB的核心信息,包括事务系统信息.元数据信息,记录InnoDB change buffer的btree,防止数据损坏的double w ...

  7. InnoDB数据存储结构

    MySQL服务器上 存储引擎 负责对表中数据的读取和写入工作,不同存储引擎中 存放的格式 一般是不同的,甚至有的存储引擎(Memory)不用磁盘来存储数据. 页 (Page) 是磁盘和内存之间交互的基 ...

  8. Innodb物理存储结构系列1

    本篇先介绍 下Innodb表空间,文件相关的内存数据结构. 1. 数据结构 Innodb的tablespace和文件的关系,是一对多的关系,先来看三个结构体 1. fil_system_struct: ...

  9. MySQL InnoDB的存储结构总结

    从物理意义上来讲,InnoDB表由共享表空间.日志文件组(redo文件组).表结构定义文件组成.若将innodb_file_per_table设置为on,则系统将为每一个表单独的生成一个table_n ...

随机推荐

  1. [Eclipse] - eclipse集成jboss7.1

    参考来源:http://www.cnblogs.com/HD/p/4000554.html 1.打开eclipse: 2.输入:jboss tools 本例已经安装,未安装的话点Install 3.只 ...

  2. 平板上的js和电脑上js的不同之处

    一.事件 1.平板上没有:onmousedown,onmouseup,onmousemove等事件,由ontouchstart,ontouchmove,ontounchend替代 2.位置问题:平板上 ...

  3. Linux Daemon 类程序

    1.后台daemon程序(精灵程序) 在Linux中专门提供了一个函数来完成这个daemon化的过程,这个函数的原型如下 int daemon (int __nochdir, int __noclos ...

  4. PTA Insertion or Heap Sort

    According to Wikipedia: Insertion sort iterates, consuming one input element each repetition, and gr ...

  5. ios 关于状态栏的一些小知识

    一.改变状态栏颜色 状态栏分为两种颜色,默认的是黑色,这里想要改为白色: 分为两步: 第一步:在项目中找到plist文件,添加View controller-based status bar appe ...

  6. WCF、WebAPI、WCFREST、WebService之间的区别

    注明:转载 在.net平台下,有大量的技术让你创建一个HTTP服务,像Web Service,WCF,现在又出了Web API.在.net平台下,你有很多的选择来构建一个HTTP Services.我 ...

  7. JavaScript数组的一些方法集合

    数组方法集合 push()添加到数组末尾,并返回修改后数组的长度 var a=array.push('a','b'); alert(a);//2 pop() 移除数组最后一项,返回移除的项. shif ...

  8. 1.jenkins持续集成-jenkins安装

    1.为什们要使用jenkins Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括: 1.持续的软件版本发布/测试项目; 2.监控外部调用执行的工作. 2.安装jen ...

  9. javascript遍历算法与技巧

    转载自脚本之家,以下为链接 http://www.jb51.net/Special/281.htm

  10. intel显卡笔记本恢复屏幕亮度调整功能

    更新Intel显卡驱动后不能修改屏幕亮度,可以在注册表里面搜索featuretestcontrol,将f000修改为ffff,重启后就可以通过Fn+F4/F5调整屏幕亮度了. 注:此方法适用于带有in ...