B树和B+树和Hash索引

例如5阶的B树:

最大指针为5,最大Key为4 (n-1) (Key即索引),Key指向数据(或其指针).

每当有新的索引试图插入B-Tree,就会与当前节点现存的索引作大小比较:

然后找到合适的区间,区间有一个指针指向子节点,最后插入被指向的节点(重复上述过程),最后新索引插入在叶子节点

这样就完成了索引的B-Tree结构.

当叶子节点的Key(索引)数量到达上限时,新索引插入之后,中间索引向上分裂,原节点从中间分家,成为两个新的节点

以此类推……….

例如:3阶的B+树

底层原理与B树相同,最大的区别是:

当节点存储的索引超过上限分家时,将中间的索引留在当前节点中,再复制一份中间索引向上分裂出去,并且形成一个单向的链表指向下一个叶子节点.

所以叶子节点包含了所有节点的索引.在InoDB中增强了算法,将所有叶子节点的链表连接由单向改为双向,便于范围查询和反向遍历

所有数据都在叶子节点中,搜索效率稳定.其他父节点不存储数据,仅起到区间分类的作用,并且节省内存空间.

tips:每个节点(每页)大小16KB,存储数据会导致可存储的索引数量下降,进而让树变高

支持双向链表,便于范围搜索和排序

计算数据库表中的每一行级的Hash值,再将数据通过特定的哈希函数计算出数据对应的Hash槽位,

然后将Hash值填入对应槽位.

当两个Hash值相同时(哈希冲突),就会把两个数据链成链表.

Hash结构不支持范围查找,仅支持根据Hash值的精确查找

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇