同事推荐看看,以前都是看书,毕竟官方文档仍是靠谱些(Verison 5.7)html
官网地址node
- DB_TRX_ID,6个字节,记录上一次insert/update操做的事务ID(delete看做update)
- DB_ROLL_PTR(roll pointer),7个字节,指向写入rollback segement 的undo日志记录
- DB_ROW_ID,6个字节,单调递增,聚簇索引包括row ID
在主内存中缓存表数据和索引数据。缓冲池是一个连续的页,采用LRU算法淘汰不多使用的数据。mysql
change buffer是一种特殊的数据结构,缓存二级索引页的变化,而且这些缓存页不在buffer pool中。change buffer主要有DML操做致使的,而且当有读操做将页面加载到buffer pool后,进行合并到buffer pool。事务提交会致使change buffer合并,服务器中止和重启也会致使。若是二级索引包含降序索引列或主键包含降序索引列,则不支持更改缓冲。 change buffer默认占有buffer pool内存的25%,最大为50%。算法
自适应Hash Index是为加速查询 在Mysql5.7中,对自适应Hash Index进行了分区,每一个索引绑定一个特定的分区,而且每一个分区是被分离锁保护。分区是由innode_adaptive_hash_index_parts控制,默认8个分区,最大512。sql
日志缓冲区是存储要写入磁盘上的日志文件的数据的内存区域。默认16MB。数据库
InnoDB表及其索引能够在system tablespace、file-per-table tablespace、general tablespace中建立。当innodb_file_per_table开启,InnoDB table就隐式在每一个file-per-table tablespace中,相反则在system tablespace。至于general tablespace,则须要使用create table ... tablespace语句。 当新建一个InnoDB table时,会在数据库data目录下建立一个.frm的文件。缓存
- 在file-per-table tablespace中建立的表,在数据库目录下会建立一个.ibd的文件。
- 在system tablespace中建立的表,是在数据库目录下会现有的ibdata 文件中建立。
- 在general tablespace中建立的表,是在现有的.ibd文件中建立。
数据行格式由innodb_default_row_format决定,默认是DYNAMIC。服务器
前提是表是由innode_file_per_table tablespace建立。数据结构
必须至少是索引的一部分ide
聚簇索引存储行数据,聚簇索引和主键是一致的。
没有定义主键或者没有合适的惟一索引,InnoDB内部在包含row id值的合成列上生成一个名为GEN_CLUST_INDEX的隐藏集群索引。这个row id占用6个字节。
二级索引包含主键值,经过主键值查找聚簇索引。
除了空间索引是R-tree结构,其余的InnoDB索引都是B-tree结构,索引记录都存在树的叶子节点上,默认一个索引页大小16kb。索引记录是有序存储的,这样可让索引页15/16的空间是利用的,1/16的空间给索引增长预留。
index bulid分为三个阶段
- 第一阶段:扫描汇集索引,生成索引条目并将其添加到排序缓冲区。当排序缓冲区满时,条目将被排序并写入临时中间文件。这个过程也称为“run”。
- 第二阶段:将一个或多个run写入临时中间文件,对文件中的全部条目执行合并排序。
- 第三阶段:排序后的条目被插入到B-tree中。