当前位置:网站首页>MYSQL索引钟B-TREE ,B+TREE ,HASH索引之间的区别和应用场景
MYSQL索引钟B-TREE ,B+TREE ,HASH索引之间的区别和应用场景
2022-07-06 09:19:00 【几何学家】
先前提到过,一个好的索引能够加速mysql的检索速度,但其实索引也有不同的类型,就比如不同的工具在不同的应用场景下也能发挥一个合适的效果
mysql目前的索引主要有B-TREE ,B+TREE ,HASH
1.HASH索引
哈希索引的key,value的格式很适合作为索引,对于每一行数据,存储引擎都会计算出一个hashcode,,哈希索引将所有的hashcode存储在索引中,同时保存每行数据的指针
哈希索引的缺点:
1.哈希索引只包含哈希值和行指针,不存储字段值,因此不能使用索引中的值来读取行,要采用hashcode
2.hash索引适合比较等值查询,对于一些范围查询由于并不是按照索引值顺序存储的,因此也就不适合排序
3.大量hash冲突的话,维护操作的代价会很高
2.B-Tree索引
B树是一种平衡的多路查找树,我们把树中结点最大的子树数目称为B树的阶。通常记为m。
B树的查找操作:
B树的查找其实和二叉排序树非常相似,可以理解为m叉排序树
① 先让待查找关键字key和结点中的关键字比较,如果等于某个关键字,则查找成功。
② 如果和所有的关键字都不相等,则看key处在哪个范围内,然后去对应的指针所指向的子树中查找。
例: 如果Key比第一个关键字K1还小,则去P0指针所指向的子树中查找,如果比最后一个关键字KN还大,则去PN指针所指向的子树中查找。
第一步:和跟节点10比较,不等且比10大,去右边的子树中查找;
第二步: 和右子树中关键字14比较,不等且比14小,故去左子树中查找;
第三步:和左子树中关键字11比较,相等,获取其data,返回。
B树的插入删除等操作不详细介绍,有需要可以看这篇帖子https://www.cnblogs.com/xiaofengshan/p/15443140.html
优点:
B树可以在内部节点同时存储键和值,因此,把频繁访问的数据放在靠近根节点的地方将会大大提高热点数据的查询效率。这种特性使得B树在特定数据重复多次查询的场景中更加高效。
3.B+树索引
B+树是B-树的变体,也是一颗多路搜索树。一棵m阶的B+树主要有这些特点:
每个结点至多有m个子女;
非根节点关键值个数范围:⌈m/2⌉ - 1 <= k <= m-1
相邻叶子节点是通过指针连起来的,并且是关键字大小排序的。
优点:
当需要进行一次全数据遍历的时候,B+树只需要使用O(logN)时间找到最小的一个节点,然后通过链进行O(N)的顺序遍历即可。而B树则需要对树的每一层进行遍历,这会需要更多的内存置换次数,因此也就需要花费更多的时间
B+树和B-树的主要区别如下:
B-树内部节点是保存数据的;而B+树内部节点是不保存数据的,只作索引作用,它的叶子节点才保存数据。
B+树相邻的叶子节点之间是通过链表指针连起来的,B-树却不是。
查找过程中,B-树在找到具体的数值以后就结束,而B+树则需要通过索引找到叶子结点中的数据才结束
B-树中任何一个关键字出现且只出现在一个结点中,而B+树可以出现多次。
边栏推荐
- The earth revolves around the sun
- VLSM variable length subnet mask partition tips
- FairyGUI循環列錶
- 2022国赛Re1 baby_tree
- 基于rtklib源码进行片上移植的思路分享
- Comparative analysis of the execution efficiency of MySQL 5.7 statistical table records
- IText 7 generate PDF summary
- Edit distance (multi-source BFS)
- The port is occupied because the service is not shut down normally
- How to reduce the shutdown time of InnoDB database?
猜你喜欢

RTKLIB: demo5 b34f. 1 vs b33
![[算法] 剑指offer2 golang 面试题9:乘积小于k的子数组](/img/65/fc3fb5a217a3b44f506b695af53e2c.png)
[算法] 剑指offer2 golang 面试题9:乘积小于k的子数组

The service robots that have been hyped by capital and the Winter Olympics are not just a flash in the pan
![[algorithm] sword finger offer2 golang interview question 1: integer division](/img/e6/f17135207b3540ec58e5a9eed54220.png)
[algorithm] sword finger offer2 golang interview question 1: integer division

Wechat applet development experience

Halcon knowledge: gray_ Tophat transform and bottom cap transform

FairyGUI条子家族(滚动条,滑动条,进度条)

【无标题】

PR 2021 quick start tutorial, first understanding the Premiere Pro working interface

编辑距离(多源BFS)
随机推荐
All in one 1405: sum and product of prime numbers
Special palindromes of daily practice of Blue Bridge Cup
记录:初次cmd启动MySQL拒接访问之解决
Fgui project packaging and Publishing & importing unity & the way to display the UI
几道高频的JVM面试题
What are the functions and features of helm or terrain
FairyGUI按钮动效的混用
架构师怎样绘制系统架构蓝图?
Fabrication of fairygui simple Backpack
Fairygui character status Popup
微信小程序开发心得
Ten minutes to thoroughly master cache breakdown, cache penetration, cache avalanche
The port is occupied because the service is not shut down normally
Error: symbol not found
On March 15, the official version of go 1.18 was released to learn about the latest features and usage
PRIDE-PPPAR源码解析
基本Dos命令
《软件测试》习题答案:第一章
第一人称视角的角色移动
KF UD分解之UD分解基础篇【1】