暂无图片
Hash索引和B+树所有有什么区别或者说优劣呢?
我来答
分享
小林同学
2023-12-05
Hash索引和B+树所有有什么区别或者说优劣呢?

Hash索引和B+树所有有什么区别或者说优劣呢?

我来答
添加附件
收藏
分享
问题补充
1条回答
默认
最新
yBmZlQzJ

首先要知道Hash索引和B+树索引的底层实现原理:

hash索引底层就是hash表,进行查找时,调用一次hash函数就可以获取到相应的键值,之后进行回表查询获得实际数据.B+树底层实现是多路平衡查找树.对于每一次的查询都是从根节点出发,查找到叶子节点方可以获得所查键值,然后根据查询判断是否需要回表查询数据.

那么可以看出他们有以下的不同:

hash索引进行等值查询更快(一般情况下),但是却无法进行范围查询.

因为在hash索引中经过hash函数建立索引之后,索引的顺序与原顺序无法保持一致,不能支持范围查询.而B+树的的所有节点皆遵循(左节点小于父节点,右节点大于父节点,多叉树也类似),天然支持范围.

hash索引不支持使用索引进行排序,原理同上.

hash索引不支持模糊查询以及多列索引的最左前缀匹配.原理也是因为hash函数的不可预测.AAAA和AAAAB的索引没有相关性.

hash索引任何时候都避免不了回表查询数据,而B+树在符合某些条件(聚簇索引,覆盖索引等)的时候可以只通过索引完成查询.

hash索引虽然在等值查询上较快,但是不稳定.性能不可预测,当某个键值存在大量重复的时候,发生hash碰撞,此时效率可能极差.而B+树的查询效率比较稳定,对于所有的查询都是从根节点到叶子节点,且树的高度较低.

因此,在大多数情况下,直接选择B+树索引可以获得稳定且较好的查询速度.而不需要使用hash索引.

暂无图片 评论
暂无图片 有用 6
打赏 0
暂无图片
回答交流
Markdown


请输入正文
提交
相关推荐
MySQL 外键约束不兼容是什么问题?
回答 1
没理解问题。不过一般来说数据库都不建议使用外键。不管什么数据库。
在高并发情况下,如何做到安全的修改同一行数据?
回答 4
已采纳
要安全的修改同一行数据,就要保证一个线程在修改时其它线程无法更新这行记录。一般有悲观锁和乐观锁两种方案使用悲观锁悲观锁思想就是,当前线程要进来修改数据时,别的线程都得拒之门外比如,可以使用select
各位DBA,有这个时候还在加班的不?
回答 3
已采纳
给加班费就可以拉,不给不可以拉,哈哈
在MySQL 8.0.20版本中,下列关于SELECT子句中OUTFILE的位置正确的是?
回答 2
ABC
如何对大表开启压缩呢?如果开启后,是空间换时间,带来的负面是啥?
回答 2
mysql这种很少用压缩表的,读写占用增加cpu的负担不说,这里面会不会有未知的bug就难以预料了。
一个服务器上能否运行两个版本的mysql?
回答 11
已采纳
windows可以安装多个版本的mysql.之前有遇到过.可以使用服务来管理mysqldinstall没报错信息的话,大概率是路径不对或者不存在之类的.你可以使用console来看下具体报啥错不建议w
有没有完全兼容MySQL 5.7语法的国产数据库?
回答 6
可以考虑一下国产数据库达梦和POLARMYSQL,选择的区间比较大的。
数据库服务器、数据库和表的关系,正确说法是
回答 1
已采纳
B
在使用cpu多核功能上,mysql和pg哪个能用上多核的特性?
回答 3
MySQL和PostgreSQL都可以使用CPU的多核特性,但是在处理单个查询时,PostgreSQL可以更好地利用多核特性。MySQL在处理单个查询时,只能使用一个CPU核心。这意味着,即使你有一个
万里数据库的知识产权情况如何?软著、发明专利是个什么情况?
回答 1
万里数据库具备完善的知识产权保护体系,其中:发明专利10项:已授权5项,在审5项;商标:7项;软件著作权:40余项。