当前位置:网站首页>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+树可以出现多次。
边栏推荐
- PRIDE-PPPAR源码解析
- 错误: 找不到符号
- [algorithm] sword finger offer2 golang interview question 8: the shortest subarray with a sum greater than or equal to K
- Lean product development - Lean Software Development & lean product development
- Fabrication d'un sac à dos simple fairygui
- [算法] 剑指offer2 golang 面试题5:单词长度的最大乘积
- 国企秋招经验总结
- isEmpty 和 isBlank 的用法区别
- [algorithm] sword finger offer2 golang interview question 4: numbers that appear only once
- 面渣逆袭:Redis连环五十二问,三万字+八十图详解。
猜你喜欢
面渣逆袭:Redis连环五十二问,三万字+八十图详解。
The service robots that have been hyped by capital and the Winter Olympics are not just a flash in the pan
FairyGUI按钮动效的混用
[算法] 剑指offer2 golang 面试题4:只出现一次的数字
Wechat applet development experience
基本Dos命令
2年经验总结,告诉你如何做好项目管理
Record: the solution of MySQL denial of access when CMD starts for the first time
Heap sort [handwritten small root heap]
The port is occupied because the service is not shut down normally
随机推荐
2022国赛Re1 baby_tree
[rtklib 2.4.3 B34] version update introduction I
服务未正常关闭导致端口被占用
Fabrication d'un sac à dos simple fairygui
How to improve the deletion speed of sequential class containers?
[算法] 剑指offer2 golang 面试题1:整数除法
Fabrication of fairygui simple Backpack
Implementation of Excel import and export functions
记录:Navicat Premium初次无法连接数据库MySQL之解决
Mysql database reports an error: row size too large (> 8126) Changing some columns to TEXT or BLOB or using ROW_ FORMAT=DY
Fairygui character status Popup
记录:newInstance()过时的代替方法
错误:排序与角标越界
第一人称视角的角色移动
Record: newinstance() obsolete replacement method
Music playback (toggle & playerprefs)
几道高频的JVM面试题
121道分布式面试题和答案
XV Function definition and call
PR 2021 quick start tutorial, first understanding the Premiere Pro working interface