mysql中如果不特殊说明,那么索引指的就是B-tree索引。B-tree有一张图示:数据存储空间中,每个数据之间,都有一个指向叶子页的指针(把第一个指针理解成根节点),这个叶子页里面是根结点key值大于根结点前一个key,小于根结点后一个key。(理解成两个数据的key之间有一个指向下一个叶子页的指针,这个叶子页里存储的是这两个数据之间的key,而叶子页节点的key指向的就是具体的数据了。如果索引比较复杂,应该会有多层结构。

B-tree索引的优点就是索引都是顺序排列的,因此很适合顺序查找以及数据的排序(order by)。

我们之前说过,索引列可以是单独的一列,也可以是多个列组成一个索引列,这里面是有区别的,同样的列组成的索引,会因为多个列的顺序不同形成不同的索引列。在适应索引时,有一下几种类型的可以使用B-tree索引:

全值匹配:就是精确查找。比如有name和age两列组成一个索引,全值匹配就是分别这两个条件完全匹配。

匹配最左前缀:这个我们前面说过,比如name,age,country三列组成一个索引,查询条件只有name=“xxx”时,可以使用这个索引。但是,如果查询条件为age=“10”时,该条查询就不会用到这条索引。

匹配列前缀:索引列只匹配该列前面部分值,是会用到索引的。

范围匹配:多个列组成的索引,在最左列前缀条件下的范围匹配,或是单个列的索引的范围匹配。

精确匹配与范围匹配结合:

还是以上面三个列组成的索引为例:当查询条件变成,name=“a” and age>10时,可以使用索引。

这里也有B-tree的一个限制很类似,做一下类比:也是范围查询,name,age,country分别生成三个索引。当查询条件为:name=“a” and age>10 and country =“b”时,三个索引只会用到前两个,范围匹配后的country索引用不到。

B-tree的另一个限制,name,age,country组成一个索引,查询不能跳过中间列,比如name=“a” and thencountry=“b”时,就不会用到这个索引。

哈希索引:

哈希索引就是在数据表中维护一个哈希值,然后再将这些哈希值和存储对应位置的指针生成一个哈希表。

在查询时,会先比较哈希值,然后查到索引的指针,最后取出值。

有一个点:相同数据的哈希值一样,那么,会有一个链表来存储想到的哈希值对应的多个位置指针,当查询的哈希值相同时,会遍历这个链表的数据,返回值。哈希索引的优点就是快。

InnoDB有一个自适应哈希索引的功能,这个功能是innoDB会自己将经常查询的数据的生成哈希值,当下次查询时,就用这个哈希值做查询条件,还是为了提速,遗憾的是这个并不是用户可定义的。全是存储引擎自己决定的。但是用户可以决定是否开启这项功能。

一个跟哈希相似的例子就是:当匹配比较复杂字符串时(比如url),使用b-tree查询效果并不一定好,一个小技巧是,将url用函数转换成哈希值,然后多加一个列。后面匹配哈希值比之间匹配字符串效率高很多。哈希索引了解的那很到位。后面我们继续~

如有错误,请指正。

mysql tree 和 hash_mysql_B-tree索引和哈希索引相关推荐

  1. MySQL索引(B+Tree 索引、哈希索引、全文索引、 空间数据索引)、索引优化、优点、使用场景

    1. MySQL 索引是在存储引擎层实现的,而不是在服务器层实现的,所以不同存储引擎具有不同的索引类型和实现. 1.1 B+Tree 索引 是大多数 MySQL 存储引擎的默认索引类型. 因为不再需要 ...

  2. Mysql InnoDB B+树索引和哈希索引的区别? MongoDB 为什么使用B-树?

    B-树和B+树最重要的一个区别就是B+树只有叶节点存放数据,其余节点用来索引,而B-树是每个索引节点都会有Data域. B+树 B+树是为磁盘及其他存储辅助设备而设计一种平衡查找树(不是二叉树).B+ ...

  3. MySQL B+树索引和哈希索引的区别

    导读 在MySQL里常用的索引数据结构有B+树索引和哈希索引两种,我们来看下这两种索引数据结构的区别及其不同的应用建议. 二者区别 备注:先说下,在MySQL文档里,实际上是把B+树索引写成了BTRE ...

  4. MySQL 索引 :哈希索引、B+树索引、最左前缀匹配规则、全文索引

    文章目录 索引 什么是索引 索引优缺点与适用场景 常见的索引 哈希索引 自适应哈希索引 B+树索引 聚集索引 非聚集索引 使用方法 联合索引 最左前缀匹配规则 覆盖索引 全文索引 使用方法 索引 什么 ...

  5. MySQL 索引 :哈希索引、B+树索引、全文索引

    文章目录 索引 引言 常见的索引 哈希索引 自适应哈希索引 B+树索引 聚集索引 非聚集索引 使用方法 联合索引 最左前缀匹配规则 覆盖索引 全文索引 使用方法 索引 引言 为什么需要索引? 倘若不使 ...

  6. MySQL B+树索引和哈希索引介绍

    * GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 索引介绍 索引是一种特殊的数据库结构,被设计用来快速查询数据库表中的特定记录.索引有多种类型,就像字典有拼音查找和偏旁 ...

  7. B+树索引和哈希索引

    转自:https://www.cnblogs.com/zengkefu/p/5647279.html 导读 在MySQL里常用的索引数据结构有B+树索引和哈希索引两种,我们来看下这两种索引数据结构的区 ...

  8. B+树索引和哈希索引的区别——我在想全文搜索引擎为啥不用hash索引而非得使用B+呢?...

    哈希文件也称为散列文件,是利用哈希存储方式组织的文件,亦称为直接存取文件.它类似于哈希表,即根据文件中关键字的特点,设计一个哈希函数和处理冲突的方法,将记录哈希到存储设备上. 在哈希文件中,是使用一个 ...

  9. 数据库中的索引技术——哈希索引

    1.哈希索引 哈希索引(hash index)基于哈希表实现,只有精确匹配索引所有列的查询才有效.对于每一行数据,存储引擎都会对所有的索引列计算一个哈希码(hash code),哈希码是一个较小的值, ...

  10. mysql单列索引和多列索引_浅谈MySQL索引优化

    索引基础知识总结及常见索引优化手段 一.索引简介 什么是索引? MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构. 可以简单理解为"排好序的快速查找数据 ...

最新文章

  1. 前端和后端的英文_计算机专业的本科生在前端、后端、测试和运维之间该如何选择...
  2. 腾讯云数据库TDSQL-学习心得与收获
  3. matlab中转置矩阵的特征值,矩阵乘以矩阵的转置运算的解析
  4. 云呐|国有资产管理信息系统,资产管理信息系统功能描述
  5. emc整改措施及案例_EMC整改案例分享
  6. 用支付宝和微信都可以扫的聚合支付码其原理是什么?云收呗的原理也很简单,API搭建比较方便,云收呗是最大的黑天鹅
  7. HTML5表单新特征简介与举例
  8. [Excel 与 股票] 一图胜千言之 Excel 处理股票数据
  9. FFplay文档解读-20-音频过滤器五
  10. 北京市区最大天然冰场今开放
  11. 史上最糟糕简历:长度超过一页 使用过多术语
  12. 中控集团杭州深蓝数智专场 — 纯前端表格技术应用研讨会
  13. 王者荣耀站力查询接口(每日更新)
  14. [转]文本相似性算法:simhash/minhash/余弦算法
  15. 文字转语音软件哪个好用
  16. 3月份不良与垃圾信息举报:垃圾邮件占31.7%
  17. uni-app踩坑日记
  18. React(8)-组件ref引用
  19. C#通过AMO对象模型浏览SQL SERVER 2005 SSAS角色一例
  20. 泼辣修图Polarr5.11.4 版,让你的创意无限延伸

热门文章

  1. AI界的革命!终于可以自动标注了!
  2. LeetCode之根据字符出现频率排序
  3. SSD物体检测(附源代码,可以直接运行)
  4. Android之进程间通信AIDL
  5. 孩子们各显神通对付 iOS 12「屏幕使用时间」的限制
  6. [HNOI2010]PLANAR
  7. spring3: AOP 之 6.2 AOP的HelloWorld
  8. 虚拟机单一网卡设置两个IP
  9. SSh三大框架的作用
  10. cf500B New Year Permutation