数据库索引结构一般引用B树或者索引。
利用树结构的原因?
- 树结构查询效率更高
- 节点按照顺序排列
二叉树结构
B树结构
一个m阶的B树具有如下几个特征:
1.根结点至少有两个子女。
2.每个中间节点都包含k-1个元素和k个孩子,其中 m/2 <= k <= m
3.每一个叶子节点都包含k-1个元素,其中 m/2 <= k <= m
4.所有的叶子结点都位于同一层。
5.每个节点中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域分划。
数据库索引选用B树不选用二叉树原因?
索引存储在硬盘上,当查询索引时,不能将索引全部加载到内存中,因为索引达到一定数量时,数据量很大,所以需要按照磁盘页分页加载查询,B树的一个节点即为一个磁盘页(默认最大为16K)。
- B树的“矮胖”结构,节点内容丰富,可降低磁盘IO
- 虽然在每个节点中仍需要对比,但是相对磁盘IO,内存中的比较对于性能影响几乎可以忽略
B+树结构
B+树特征
1.有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。
2.所有的叶子结点中包含了全部元素的信息,及指向含这些元素记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。
3.所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素。
B+树与B树的区别?
- B+树的子节点中只包含索引,不包含数据指针,B树结构中包含;导致B+树相对,每个节点包含的信息更加多,相对B树结构更加矮胖,磁盘IO次数更少
- B+树的叶子节点还包括了下一个叶子节点指针,利于范围查询
- B+树的指针信息都包含在叶子节点中,所以B+树查询性能稳定;B-树当查询到中间节点时,性能更优