mysql innodb 理解
一、对 b树和b+树的理解
1.b树 数据同时存在于叶子节点和非叶子节点,而B+树的数据只存储在叶子节点,非叶子节点只存储关键字及指针
2.b 树无法按照简单的顺序遍历b树中的关键字,而是采用中序遍历(左根右)
3.b+树的叶子节点存储的是子树里面的最小关键字,且数据都存储在叶子节点,叶子节点增加了横向的指针,使得遍历变得非常简单
4.b+树因为非叶子节点只存储了关键字,使得它占用的空间更小,所以可以一次性的把所有的非叶子节点的关键字读入内存,当遍历是通过内存计算找到真正的叶子节点,所以只需要一次硬盘io操作,而b树的每次自上而下的遍历都是一次硬盘io ,内存的访问效率要比硬盘io的访问效率高的多,所以b+树的遍历上有一定的优势,正因为如此B+树适合作为数据库的基础结构。
B树插入和更新只更改部分数据,其次B+树是顺序读取,而B树是随机读取
单次 io 的步骤:寻道+旋转+数据传送
二、mysql 的聚簇索引和非聚簇索引
1.聚簇索引和非聚簇索引不是索引的类型,而是一种存储结构
2.对于聚簇索引存储来说,行数据和主键b+树存储在一起,辅助键b+树只存储辅助键和主键,Innodb 使用的是聚簇索引
3.对于非聚簇索引存储来说,主键b+树在叶子节点只存储指向真正数据的指针(数据地址),而没有存储主键和行数据,myISM 使用的是非聚簇索引。
4.两种存储方式的检索过程差异(图片拷贝,比较懒)
1.若使用"where id = 14"这样的条件查找主键,InnoDB主键索引直接找到叶子节点读取到数据,而MyISAM 使用主键索引找到叶子节点后拿到地址后,再读取到数据
2.若使用"where name = Jobs"这样的条件查找主键,Innodb 使用辅助键索引查找到叶子节点中的主键值,然后通过主键在找到真真的数据(上述步骤1),所以分了两步检索,而MyISAM 使用辅助键索引找到叶子节点拿到地址后读取到数据
3.综上所述,Innodb 的优势就是主键和行数据是一起被加载到内存的,这样就直接得到数据了,按照主键id 的方式检索,这样检索的速度更快,而MYISAM 还要通过地址在去读一次,其检索速度就会打折扣。其次在辅助索引的维护上,聚簇索引也要优于非聚簇索引,因为聚簇索引的辅助索引使用主键作为指针不会受行的移动和数据页的分裂的影响(这一点还要继续研究)。
4.再总结一点就是Innodb 的检索效率要比mYISAM 效率高,而在更新和插入没有MyISAM 高
三、Page 结构
page 是整个innodb 存储的最基本构建,是磁盘管理的最小单元,对于b+树的节点来说,一个page 可以存储多个节点,每个page 使用一个32位的int 型数据来唯一标识,所以innodb 的存储空间也是有限的,一个page 的大小为16kb,总的大小=16*32^2=64TB,最多存储64TB 大小的类容。
page 中存储的都是叶子节点,往往通过跟节点遍历,通过非叶子节点最终到达一个page,而非叶子节点存储了主键以及page 的编号,以下图例说明各个节点以及page 中存储的内容
1 主索引树非叶节点(绿色)
1 子节点存储的主键里最小的值(Min Cluster Key on Child),这是B+树必须的,作用是在一个Page里定位到具体的记录的位置。
2 最小的值所在的Page的编号(Child Page Number),作用是定位Record。
2 主索引树叶子节点(黄色)
1 主键(Cluster Key Fields),B+树必须的,也是数据行的一部分
2 除去主键以外的所有列(Non-Key Fields),这是数据行的除去主键的其他所有列的集合。
这里的1和2两部分加起来就是一个完整的数据行。
3 辅助索引树非叶节点非(蓝色)
1 子节点里存储的辅助键值里的最小的值(Min Secondary-Key on Child),这是B+树必须的,作用是在一个Page里定位到具体的记录的位置。
2 主键值(Cluster Key Fields),非叶子节点为什么要存储主键呢?因为辅助索引是可以不唯一的,但是B+树要求键的值必须唯一,所以这里把辅助键的值和主键的值合并起来作为在B+树中的真正键值,保证了唯一性。但是这也导致在辅助索引B+树中非叶节点反而比叶子节点多了4个字节。(即下图中蓝色节点反而比红色多了4字节)
3 最小的值所在的Page的编号(Child Page Number),作用是定位Record。
4 辅助索引树叶子节点(红色)
1 辅助索引键值(Secondary Key Fields),这是B+树必须的。
2 主键值(Cluster Key Fields),用来在主索引树里再做一次B+树检索来找到整条记录。
原文地址:https://blog.csdn.net/voidccc/article/details/40077329