前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mysql索引-hash和btree什么区别?

mysql索引-hash和btree什么区别?

作者头像
逍遥壮士
发布2022-03-29 13:44:38
8770
发布2022-03-29 13:44:38
举报
文章被收录于专栏:技术趋势技术趋势

背景

日常开发中,我们在创建mysql索引的时候经常有两种选择,BTREE和HASH,但其实很多同学不清楚到底BTREE和HASH有什么区别,当然如果不深入去了解很多觉得差不多,其实这个差别还是挺大的。如下表格。

比较名称

hash

btree

备注

顺序

无序

有序

Btree数据是有序的,而hash是没有顺序的。

效率

较低

理论上hash查询效率较btree高。

索引排序

不支持

支持

hash不支持排序,btree支持。

部分索引

不支持

支持

hash不支持部分索引查询因为是无序的,而btree可以。

避免全表扫描

不支持

支持

hash任何时候都无法避免全表扫描,而btree可以。

hash的实现:hash是以key、value的形式存储,是通过hash索引计算出一个唯一的hash的key值,然后通过该key值进行全表匹配判断(组合索引也一样),查询出value值。这样的话虽然说效率很高,但是避免不了全表扫描,反而当数据量非常大的时候会导致哈希碰撞问题,性能就会比btree慢多了。

btree的实现:btree也称为b+树,主要的实现是通过一个平衡二叉树进行判断范围查询,如下图:,btree的性能比较稳定,不会出现很大的波动,也不会出现hash的碰撞问题,基于索引的顺序扫描,也可以利用双向指针快速左右移动,效率非常高。

最后

btree适用于大部分的场景,并且也是非常实用,虽然说除了在少量数据量场景下,性能不如hash其它的特性与性能远超hash,而且很多开源的数据管理平台或系统都是借鉴btree的原理进行实现比如:mongo,当然对于研发人员,对于技术的了解不单单只停留在表面使用更多时候还是需要深入。

参考

https://zhuanlan.zhihu.com/p/58292748

https://zhuanlan.zhihu.com/p/350020687

https://dev.mysql.com/doc/refman/5.6/en/index-btree-hash.html

https://www.cnblogs.com/baizhanshi/p/11084539.html

https://www.yidianphp.com/archives/811

https://www.jb51.net/article/196398.htm

https://www.cnblogs.com/hickup089/p/15337284.html

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-02-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 技术趋势 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档