1 .存储引擎数据结构
1. B树(B-树)。
b树是2-3树的扩展,对m下一个b树来说如下。
(1)根节点至少有两个子节点
)每个节点最多有M-1个密钥,按升序排列,并有Nk 1个指针。 其中,Nk表示密钥的数量。
)3)对于一个key1,左侧指针指向的子节点的key值=key1,右侧子指针指向的子节点的key值key1) (见下图)。
)4)其他节点至少有M/2个子节点
以下博客详细介绍了在b树中插入节点的过程:
他的插入过程和红黑树很相似。 总结如下。
)1)插入新值时,首先根据第三条原则找到他在叶节点的位置并插入
)2)当前叶节点的key数等于m时,使所有key通过一个中间值(例如,M=4为第二个数,M=5为第三个数),分为相同的两部分(m为偶数则为一个不同),将中间数作为母节点
2. B树
存储引擎常用的数据结构、多个交叉平衡搜索树和特征:
(1)除叶节点以外的所有节点都具有m个密钥和指向m个子节点的指针。
)2)所有的叶节点都在同一层次上
)非叶节点的部分树指针和关键字(Key )的个数相同;
)属于非叶节点部分树指针P[i]、关键值[K[i]、K[i 1]的部分树(B-树是开区间);
)5)在所有叶子的节点上添加链指针
(6)所有关键词) key )出现在叶节点上; 因此,所有搜索都只在叶节点上命中
结构如下图所示。
与b树的优点相比:
)1)搜索支持范围
)2)横移更方便
)3)节省空间)因为在b树中只有叶节点保存数据,所以内部节点不需要只指向关键字的具体信息的指针。
)4)所有查询操作都需要命中子节点,因此相同。
PS: B*树除了b树之外,还向叶以外的节点添加了链表指针
微软引擎
不支持事务
支持表级锁定。 (MySql支持两种表级锁定,表共享读锁定和表独占写锁定。 )不支持低电平锁定
存储表的总行数
MyISAM表包含三个文件:索引文件. MYI、表结构文件. frm和数据文件. MYD
使用非聚集索引:索引文件和数据文件是分开的,索引文件的数据域包含指向数据文件的指针
跨平台APP更方便(表格以文件格式存储) )。
支持三种类型的存储格式:
)1)静态表)存储快速、易于缓存、在出现故障时易于恢复,但由于用列宽填充空间,因此占用了大量内存
)2)动态表)占用空间少,但频繁更新和删除容易碎片化,需要定期整理,且出现故障也不易恢复。
)3)压缩表:占用的磁盘空间非常小(因为每个记录都是单独压缩的,所以访问成本很低)。
InnoDb引擎
事务支持
行级锁定支持:仅当条件语句包含主键索引时)
内存利用率低
查询效率和写入效率差
在聚集索引中,索引和数据一起存在,数据直接存储在叶的节点中。
外键支持
注:由于MyISAM使用与主键索引相似的次索引,因此在使用次索引搜索数据时,只需使用次索引树即可进行搜索,而InnoDB使用主索引树
四. MEMORY
与一个磁盘文件. frm相对应,保存表结构
访问速度非常快。 他的数据存在于内存中,但服务停止时数据会丢失
可以指定散列索引或BTREE索引
默认存储数据大小不超过16MB,但可以调整
应用场景:例如作为统计操作的中间结果表,便于有效分析中间结果,得到最终结果。
五.合并
MyISAM表的组合。 这些MyISAM表的结构必须完全相同
对MERGE表的操作实际上是对其子表执行的
通过指定INSERT_METHOD=LAST,可以创建用于插入数据的表。 在此指定最后一个表
参考:
[1] 《深入浅出MySQL》