首选要注意,这里的数据结构是存储在硬盘上的数据结构,不是内存中的数据结构,要重点考虑io次数.
一.不适合的数据结构:
1.Hash:不适合进行范围查询和模糊匹配查询.(有些数据库索引会使用Hash,但是只能精准匹配)
2.红黑树:可以范围查询和模糊匹配,但是和硬盘io次数比较多.
二.为数据库量身打造的数据结构(B+树):
1.B树(又称B-树):
a)本质上是N叉搜索树:一个节点保存多个key,N个key延展出N+1个节点(划分出N+1个区间).
从根节点出发,依次往下查找.
b)相较红黑树的优点:每个节点都可以存放多个元素,当总的元素个数确定的时候,节点数大大降低了,树的高度也降低了,查询时io次数减少了,查询效率提高了.
c)拆分和合并:在进行插入和删除元素的时候,一个节点可以存多个元素,但也不能没有限制的存,当达到一定数量的时候,就要把这个节点拆分,把这个节点中的一部分元素以数的子节点的方式来进行重新组织.
2.B+树:
特点:
a)N叉搜索树,但是N个元素分出N个区间节点最后一个元素就是最大值.
b)父节点的元素在子节点中重复出现(以最大值的身份).,叶子节点这一层,包含了所有元素.
c)叶子节点按照双向链表的方式,收尾相连,快速地找到上一个/下一个元素,方便范围查询.
优势:
a)特别擅长范围查询.
b)所有的查询最终会落到叶子节点,比较次数均衡,查询时间稳定.文章来源:https://www.toymoban.com/news/detail-694209.html
c) 由于叶子节点上是完整的元素全集,因此表的每一行元素的其他列,都可以保存到叶子节点上,而非叶子节点,指存储构件索引的id就可以了.因此,非叶子节点的存储空间消耗非常小,可以在内存中缓存一份,这样减少了硬盘io次数,提高了查询效率.文章来源地址https://www.toymoban.com/news/detail-694209.html
到了这里,关于mysql索引的数据结构(Innodb)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!