当前位置:网站首页>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+树可以出现多次。
边栏推荐
- How do architects draw system architecture blueprints?
- 2022国赛Re1 baby_tree
- Fairygui gain buff value change display
- Problems and solutions of robust estimation in rtklib single point location spp
- Fgui project packaging and Publishing & importing unity & the way to display the UI
- 341. Flatten nested list iterator
- 堆排序【手写小根堆】
- Usage differences between isempty and isblank
- 十分钟彻底掌握缓存击穿、缓存穿透、缓存雪崩
- FairyGUI增益BUFF數值改變的顯示
猜你喜欢

国企秋招经验总结

C code implementation of robust estimation in rtklib's pntpos function (standard single point positioning spp)
![[算法] 劍指offer2 golang 面試題2:二進制加法](/img/c2/6f6c3bd4d70252ba73addad6a3a9c1.png)
[算法] 劍指offer2 golang 面試題2:二進制加法

Chromatic judgement bipartite graph

【GNSS数据处理】赫尔默特(helmert)方差分量估计解析及代码实现

Rt-ppp test using rtknavi

RTKLIB: demo5 b34f. 1 vs b33

The master of double non planning left the real estate company and became a programmer with an annual salary of 25W. There are too many life choices at the age of 25

The service robots that have been hyped by capital and the Winter Olympics are not just a flash in the pan

FGUI工程打包发布&导入Unity&将UI显示出来的方式
随机推荐
地球围绕太阳转
341. Flatten nested list iterator
Mixed use of fairygui button dynamics
How to reduce the shutdown time of InnoDB database?
Record: the solution of MySQL denial of access when CMD starts for the first time
《软件测试》习题答案:第一章
[算法] 剑指offer2 golang 面试题6:排序数组中的两个数字之和
FairyGUI增益BUFF数值改变的显示
Role movement in the first person perspective
10 minutes pour maîtriser complètement la rupture du cache, la pénétration du cache, l'avalanche du cache
Excel导入,导出功能实现
国企秋招经验总结
Liste des boucles de l'interface graphique de défaillance
Record: Navicat premium can't connect to MySQL for the first time
最短Hamilton路径 (状压DP)
Music playback (toggle & playerprefs)
第一人称视角的角色移动
The port is occupied because the service is not shut down normally
2022 National Games RE1 baby_ tree
Fgui project packaging and Publishing & importing unity & the way to display the UI