专栏首页技术趋势mysql索引-hash和btree什么区别?

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

背景

日常开发中,我们在创建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 删除。
登录 后参与评论
0 条评论

相关文章

  • MySQL-Btree索引和Hash索引初探

    http://www.searchdoc.cn/rdbms/mysql/dev.mysql.com/doc/refman/5.7/en/index.com.co...

    小小工匠
  • MySQL的btree索引和hash索引区别

    hash索引仅仅能满足"=","IN"和"<=>"查询,不能使用范围查询. 比如< , 由于 Hash 索引比较的是进行 Hash 运算之后的 Hash 值,所...

    IT工作者
  • Mysql索引类型Btree和Hash的区别以及使用场景

    遇到单表数据量大的时候很多开发者都会想到给相对的字段建立索引来提高性能(mysql索引的使用),但很少会去关注索引的类型该如何选择,在mysql中支持有两种类型...

    C4rpeDime
  • MySql Hash 索引

    Hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 ...

    双鬼带单
  • MySQL之 Hash索引

    Hash索引是将一列或者多列数据值, 进行 hash运算, 并将结果映射到数组的某个位置上.

    一个架构师
  • MySQL 的 hash 索引

    最常用的索引也就是B-tree索引和Hash索引,且只有Memory,NDB两种引擎支持Hash索引。

    JavaEdge
  • MySQL hash索引和b-tree索引的区别

    Hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 ...

    星哥玩云
  • 「Mysql索引原理(二)」Mysql高性能索引实践,索引概念、BTree索引、B+Tree索引

    1. 索引是什么 2. 索引的类型 3. BTree索引 概念 举例:以5阶数为列 4. B+Tree索引 概念 5阶B+Tree插入举例 B+...

    源码之路
  • MySQL: Hash索引优缺点

    因为索引自身只需存储对应的哈希值,所以索引的结构十分紧凑,这也让哈希索引查找的速度非常快

    全栈程序员站长
  • MySQL的B+树索引和hash索引的区别

    如果使用覆盖索引就可以不回表扫描。 索引类型:InnoDB引擎,默认B+树(O(logN))、Hash索引 B树索引 O(1)

    Java技术债务
  • MySQL调优系列——MySQL B+Tree索引和Hash索引的区别?

    https://blog.csdn.net/n88Lpo/article/details/78099337?depth_1-utm_source=distrib...

    须臾之余
  • 「Mysql索引原理(三)」Mysql中的Hash索引原理

    基于哈希表实现,只有匹配所有列的查询才有效。对于每一行数据,存储引擎都会对所有索引列计算一个哈希码,哈希码是一个较小的值,不同键值的行计算出的哈希...

    源码之路
  • MySQL的普通索引和唯一索引到底什么区别?

    普通索引可重复,唯一索引和主键一样不能重复。 唯一索引可作为数据的一个合法验证手段,例如学生表的身份证号码字段,人为规定该字段不得重复,那么就使用唯一索引。(...

    JavaEdge
  • pymongo创建hash和text索引

    这个是因为在MongoDB中,从2.6开始,索引项的总大小(根据BSON类型可能包括结构开销)必须小于1024字节。

    不止于python
  • Postgresql源码(27)Btree索引相关系统表和整体结构

    《Postgresql源码(30)Postgresql索引基础B-linked-tree》

    mingjie
  • Postgresql源码(31)Btree索引相关系统表和整体结构

    《Postgresql源码(30)Postgresql索引基础B-linked-tree》

    mingjie
  • mysql索引类型和索引方式

    在MySQL中,索引(index)也叫做“键(key)”,它是存储引擎用于快速找到记录的一种数据结构。

    全栈程序员站长
  • java架构之路-(二)Mysql索引和查询引擎

      今天我们来说一下我们的mysql,个人认为现在的mysql能做到很好的优化处理,不比收费的oracle差,而且mysql确实好用。

    小菜的不能再菜
  • Mysql索引和优化

    1、选择索引的数据类型 MySQL支持很多数据类型,选择合适的数据类型存储数据对性能有很大的影响。通常来说,可以遵循以下一些指导原则: (1)越小的数据类型通常...

    wangxl

扫码关注腾讯云开发者

领取腾讯云代金券