我们在数据库见表时通常会给某个或者一些字段增加相应的索引,常用的的索引方法有hash和Btree两种。

一:BTree

B-Tree 索引的物理文件大多都是以 Balance Tree 的结构来存储的,也就是所有实际需要的数据都存放于 Tree 的 Leaf Node(叶子节点) ,而且到任何一个 Leaf Node 的最短路径的长度都是完全相同的,所以我们大家都称之为 B-Tree 索引

二:Hash

hash是以key、value的形式存储,是通过hash索引计算出一个唯一的hash的key值,然后通过该key值进行全表匹配判断(组合索引也一样),查询出value值。

三:区别

1.Hash 索引仅仅能满足"=",“IN"和”<=>"查询,不能使用范围查询如">", "<", ">=","<="

        BTree可以用于>,=,>=,<,<=等,还可以用户匹配型like的模糊查询

2.联合索引中,Hash索引不能利用部分索引键查询。
        对于联合索引中的多个列,Hash是要么全部使用,要么全部不使用,并不支持BTree支持的联合索引的最优前缀,也就是联合索引的前面一个或几个索引键进行查询时,Hash索引无法被利用。
3.Hash索引无法避免数据的排序操作
        由于Hash索引中存放的是经过Hash计算之后的Hash值,而且Hash值的大小关系并不一定和Hash运算前的键值完全一样,所以数据库无法利用索引的数据来避免任何排序运算。
4.Hash索引任何时候都不能避免表扫描
        Hash索引是将索引键通过Hash运算之后,将Hash运算结果的Hash值和所对应的行指针信息存放于一个Hash表中,由于不同索引键存在相同Hash值,所以即使满足某个Hash键值的数据的记录条数,也无法从Hash索引中直接完成查询,还是要通过访问表中的实际数据进行比较,并得到相应的结果。
5.Hash索引遇到大量Hash值相等的情况后性能并不一定会比BTree高
        对于选择性比较低的索引键,如果创建Hash索引,那么将会存在大量记录指针信息存于同一个Hash值相关联。这样要定位某一条记录时就会非常麻烦,会浪费多次表数据访问,而造成整体性能底下。

Mysql索引Hash和BTree的区别相关推荐

  1. MySQL索引原理及BTree(B-/+Tree)结构详解

    目录 摘要 数据结构及算法基础 索引的本质 B-Tree和B+Tree B-Tree B+Tree 带有顺序访问指针的B+Tree 为什么使用B-Tree(B+Tree) 主存存取原理 磁盘存取原理 ...

  2. mysql索引innodb和myisam的区别

    引用 引用 区别 InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一 ...

  3. mysql索引之间的区别

    2019独角兽企业重金招聘Python工程师标准>>> mysql索引类型: ①主键索引:与唯一索引之间的区别就在于不允许有空值,创建主键时会自动创建此索引. ②普通索引:最基本的索 ...

  4. mysql索引 聚集索引_Mysql 索引实现原理. 聚集索引, 非聚集索引

    Mysql索引实现: B-tree,B是balance,一般用于数据库的索引.使用B-tree结构可以显著减少定位记录时所经历的中间过程,从而加快存取速度.而B+tree是B-tree的一个变种,My ...

  5. MySQL索引分析以及相关面试题

    可以在我的个人博客阅读文章,排版会美观一些:文章地址 1. 什么是索引 一种能帮助mysql提高查询效率的数据结构:索引数据结构 索引优点: 大大提高数据查询速度 索引缺点: 维护索引需要耗费数据库资 ...

  6. mysql rtree_优化体系--MySQL 索引优化(full-text、btree、hash、rtree)

    概述 目前大部分数据库系统及文件系统都采用B-Tree(B树)或其变种B Tree(B 树)作为索引结构.B Tree是数据库系统实现索引的首选数据结构.在MySQL中,索引属于存储引擎级别的概念,不 ...

  7. MySQL索引数据结构二叉树、红黑树、B-Tree、B+Tree、Hash

    索引:帮助MySQL高效获取数据的有序的数据结构. 假设我们有一张表table,包含Clo1和Clo2两个字段 内存地址 Clo1 Clo2 0x07 1 36 0x5A 2 20 0x7A 3 80 ...

  8. hash和btree索引的区别

    这两天有个很强烈的感觉就是自己在一些特别的情况下还是hold不住,脑子容易放空或者说一下子不知道怎么去分析问题了,比如,问"hash和btree索引的区别",这很难吗,只要掌握了这 ...

  9. Mysql 索引 总结 —— 概述 || 索引优势劣势|| 索引结构(索引是在MySQL的存储引擎层中实现的)|| BTREE 结构||B+TREE 结构||MySQL中的B+Tree||索引分类

    索引概述 MySQL官方对索引的定义为:索引(index)是帮助MySQL高效获取数据的数据结构(有序). 在数据之外,数据库系统还维护者满足特定查找算法的数据结构, 这些数据结构以某种方式引用(指向 ...

最新文章

  1. java中关于DecimalFormat四舍五入的用法
  2. 报道称:Check Point正在洽谈收购CyberArk
  3. 空列表不等同于None
  4. java running_Running
  5. 猎豹浏览器网页声音怎么关闭
  6. eclipse怎样创建并运行java项目
  7. directUI的心得
  8. Java进阶:SpringMVC
  9. Gadgets 侧边栏小工具 跟踪调试方法
  10. java中的动态图表_Java报表软件--动态图表
  11. 触摸屏驱动学习并移植
  12. CodeMeter服务无法启动
  13. 2020年7月杭州更换异地驾照
  14. C语言--小学生计算机辅助教学系统
  15. 第14节 三个败家子(14)——在辉煌中走向深渊
  16. Boost 学习之算法篇 mismatch
  17. ssh开启图形界面_xwindow——远程启动linux的图形界面
  18. 【C++】相对路径与绝对路径以及斜杠与反斜杠的区别
  19. 程序员白piao服务器。大派送
  20. Windows10任务栏图标变白色解决方法

热门文章

  1. vue中Promise的用法
  2. 【误差】方差、标准差、均方误差和均方根误差的区别总结
  3. DBCA静默安装Oracle数据库
  4. js网页繁体简体转换
  5. windows操作系统运用jacob转换文件,并添加水印
  6. Map线程安全几种实现方法
  7. 彻底解决高版本 mac Kernel_task占CPU问题
  8. 版权领域的发展趋势对版权保护有哪些重要意义?
  9. Python os.listdir()函数用法介绍
  10. [XSY 3322][置换+dp]Dexterity