为什么MySQL数据库要用B+树存储索引?
要回答好这个问题,首先我们要弄懂什么是索引?索引常见的数据结构有哪些?这些数据结构有何优缺点?只有弄懂这些,再去比较,才会知道为啥要用B+树作为MySQL数据库的存储索引了。 一、索引是什么? MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。它的本质就是 数据结构 ,单独存储在磁盘上,用它来提高数据查询的效率。 适合作为索引的结构应该是尽可能少的执行磁盘IO操作,因为执行磁盘IO操作非常的耗时。 二、索引常见数据结构 2.1 二叉查找树(Binary Search Tree) 采取二分查找的思想,O(log N)的复杂度就可以完成对数据的查找任务,查找所需的最大次数等同于二叉查找树的高度。 它具有以下特性: 左子树上所有结点的值均小于或等于它的根结点的值; 右子树上所有结点的值均大于或等于它的根结点的值; 左、右子树也分别为二叉排序树。 如下图所示: 排序工具 对该二叉树的节点进行查找发现深度为1的节点的查找次数为1,深度为2的查找次数为2,深度为n的节点的查找次数为n,因此其平均查找次数为 (1+2+2+3+3+3) / 6 = 2.3次 二叉查找树可以任意地构造,这样会出现一种极端情况,如果依次插入如下六个节点:7,6,5,4,那么就会变成下图所示: 这样退化成线性表,导致树高度过高,从而查询效率就降低了。