DB索引结构算法(B+树/B树)

  • 1 Mysql在V5.1之前默认存储引擎是MyISAM;在此之后默认存储引擎是InnoDB
  • 1 B+树是B-树的变体,也是一颗多路搜索树,B+树相邻的叶子节点之间是通过链表指针连起来的
  • 2 B+树插入都是在叶子结点进行的,就是插入前,需要先找到要插入的叶子结点。
  • 3 在一棵B+树中,每个节点为都是一个页,每次新建节点的时候,就会申请一个页空间
  • 4 同一层的节点为之间,通过页的结构构成了一个双向链表
  • 5 非叶子节点为,包括了多个索引行,每个索引行里存储索引键和指向下一层页面的指针
  • 6 叶子节点为,存储了关键字和行记录,在节点内部(也就是页结构的内部)记录之间是一个单向的链表
  • 7 B+树是B树的改进,简单地说是:只有叶子节点才存数据,非叶子节点是存储的指针;所有叶子节点构成一个有序链表
检索数据的过程
  • 1 从B+树的根开始,逐层找到叶子节点。
  • 2 找到叶子节点为对应的数据页,将数据叶加载到内存中,通过页目录的槽采用二分查找的方式先找到一个粗略的记录分组。
  • 3 在分组中通过链表遍历的方式进行记录的查找。

数据库访问数据要通过页,一个页就是一个B+树节点,访问一个节点相当于一次I/O操作,所以越快能找到节点,查找性能越好。
B+树的特点就是够矮够胖,能有效地减少访问节点次数从而提高性能。

B+树的双链表
  • 当在使用范围查找的时候,只要找到那个边界值就可以通过指针去查找其他所需要的数据就不用再从根结点开始遍历 减少了所消耗的时间 增加了效率
B+树与B树的不同:
  • 1 B+树非叶子节点不存数据只存索引,B树非叶子节点存储数据
  • 2 B+树查询效率更高。B+树使用双向链表串连所有叶子节点,区间查询效率更高(因为所有数据都在B+树的叶子节点,扫描数据库 只需扫一遍叶子结点就行了),但是B树则需要通过中序遍历才能完成查询范围的查找。
  • 3 B+树查询效率更稳定。B+树每次都必须查询到叶子节点才能找到数据,而B树查询的数据可能不在叶子节点,也可能在,这样就会造成查询的效率的不稳定
  • 4 B+树的磁盘读写代价更小。B+树的内部节点并没有指向关键字具体信息的指针,因此其内部节点相对B树更小,通常B+树矮更胖,高度小查询产生的I/O更少。

你可能感兴趣的:(DB索引结构算法(B+树/B树))