Mysql有不同的存储引擎,其中,innoDB存储引擎使用B+树存储 B+树是一颗多叉树。特点: 【1】利用磁盘局部预读:每次读入磁盘一页数据,其中一页包含数据及其周围的数据。 B+树利用这一特点实现每一块对应磁盘的一页。即访问B+树一层对应一次IO。 【2】非叶子节点不存储数据,只存储指向叶子节点的指针 【3】叶子节点存储数据
2、B+树非叶子节点不存储数据原因? 1、B+树索引是一个多叉树的查找 其时间复杂度为O(log(m)N) N代表:数据总数量 m:一磁盘块可存储的数据项多少。当N固定时,m越大,树高度越小。 所以为了保证树足够低。非叶子节点不存储数据。 2、只有叶子节点存储数据,查找时间复杂度一致,查找更稳定。
3、MYSQL innoDB聚簇索引和二级索引及 MYSIAM非聚簇索引 聚簇索引:叶子节点value直接存储数据。索引顺序和数据存储物理顺序具有一致性。 二级索引:叶子节点value存储聚簇索引对应的主键值。 MYSQL MYSIAM :只有非聚簇餐索引,叶子节点存储执行数据块的指针。
聚簇索引一般用主键做索引: 【1】因为主键一般足够短(二级索引value值需存储索引。) 【2】有利于范围查找。 【3】自增不会引起数据的重排列,只会在末尾加入。
缺点:插入速度慢,需要挨个遍历是否存在。