innodb的存储结构
如下所示,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的存储结构的更多相关文章
- InnoDB 逻辑存储结构
本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/80 如果创建表时没有显示的定义主键,mysql会按如下方式创建主 ...
- MySQL InnoDB 逻辑存储结构
MySQL InnoDB 逻辑存储结构 从InnoDB存储引擎的逻辑结构看,所有数据都被逻辑地存放在一个空间内,称为表空间,而表空间由段(sengment).区(extent).页(page)组成.p ...
- MYSQL Innodb逻辑存储结构
转载于网络 这几天在读<MySQL技术内幕 InnoDB存储引擎>,对 Innodb逻辑存储结构有了些了解,顺便也记录一下: 从InnoDB存储引擎的逻辑存储结构看,所有数据都被逻辑地存放 ...
- Innodb页面存储结构-2
上一篇<Innodb页面存储结构-1>介绍了Innodb页面存储的总体结构,本文会介绍页面的详细内容,主要包括页头.页尾和记录的详细格式. 学习数据结构时都说程序等于数据结构+算法,而在i ...
- InnoDB逻辑存储结构
从InnoDB存储引擎的逻辑存储结构看,所有数据都被逻辑地存放在一个空间中,称之为表空间(tablespace).表空间又由段(segment).区(extent).页(page)组成.页在一些文档中 ...
- InnoDB表存储结构及keyring加密
ibdata是InnoDB最重要的系统表空间文件,它记录了InnoDB的核心信息,包括事务系统信息.元数据信息,记录InnoDB change buffer的btree,防止数据损坏的double w ...
- InnoDB数据存储结构
MySQL服务器上 存储引擎 负责对表中数据的读取和写入工作,不同存储引擎中 存放的格式 一般是不同的,甚至有的存储引擎(Memory)不用磁盘来存储数据. 页 (Page) 是磁盘和内存之间交互的基 ...
- Innodb物理存储结构系列1
本篇先介绍 下Innodb表空间,文件相关的内存数据结构. 1. 数据结构 Innodb的tablespace和文件的关系,是一对多的关系,先来看三个结构体 1. fil_system_struct: ...
- MySQL InnoDB的存储结构总结
从物理意义上来讲,InnoDB表由共享表空间.日志文件组(redo文件组).表结构定义文件组成.若将innodb_file_per_table设置为on,则系统将为每一个表单独的生成一个table_n ...
随机推荐
- 使用web图标
http://www.lovelucy.info/demo/twitter-bootstrap-custom-icons/
- libsvm参数学习和核函数使用(转载)
一.参数说明 English libsvm_options: -s svm_type : set type of SVM (default 0) 0 -- C-SVC 1 -- nu-S ...
- python install_opener用法
opener:当你获取一个URL时,你使用一个opener(OpenerDirector).正常情况下我们一直使用默认的opener,通过urlopen,但你也可以创建自定义的openers. url ...
- scala变量
#声明与定义(赋值) val 常量声明 val x:T val x:T=e (x:名字,T:类型,e:值) var 变量声明 var x:T var x:T=e #类型省略(默认类型) v ...
- spring mvc 4.3.2 + mybatis 3.4.1 + mysql 5.7.14 +shiro 幼儿园收费系统 之 消息管理
- 浅析jquery ui的datepicker组件
今天计划在博客上添加一个日历,方便用户查看日期.Google了一圈,最终决定使用jquery ui的datepicker部件实现.原因有三:Datepicker使用配置比较简洁,几行代码就可以得到一个 ...
- Android——数据的存储和访问
1.数据文件的存取操作 我们可以将数据存取在Android应用数据的默认存储地址,其地址为:安装包/data/data/<package name>/files/ 1)向文件中写入数据 p ...
- windows7内核驱动开发试验环境配置
首先配置环境参照这个: http://blog.csdn.net/qing666888/article/details/50858272 然后在win10里可能由于没有做测试签名因此一直没有成功加载驱 ...
- Singleton in C++11 style
#include <iostream> #include <memory> #include <mutex> class SingletonOld { static ...
- expense KK [ɪkˋspɛns] DJ [iksˋpens]
https://tw.dictionary.yahoo.com/dictionary?p=expense expense 1 Dr.eye譯典通 KK [ɪkˋspɛns] DJ [iksˋpen ...