mysql tree 和 hash_mysql_B-tree索引和哈希索引
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索引和哈希索引相关推荐
- MySQL索引(B+Tree 索引、哈希索引、全文索引、 空间数据索引)、索引优化、优点、使用场景
1. MySQL 索引是在存储引擎层实现的,而不是在服务器层实现的,所以不同存储引擎具有不同的索引类型和实现. 1.1 B+Tree 索引 是大多数 MySQL 存储引擎的默认索引类型. 因为不再需要 ...
- Mysql InnoDB B+树索引和哈希索引的区别? MongoDB 为什么使用B-树?
B-树和B+树最重要的一个区别就是B+树只有叶节点存放数据,其余节点用来索引,而B-树是每个索引节点都会有Data域. B+树 B+树是为磁盘及其他存储辅助设备而设计一种平衡查找树(不是二叉树).B+ ...
- MySQL B+树索引和哈希索引的区别
导读 在MySQL里常用的索引数据结构有B+树索引和哈希索引两种,我们来看下这两种索引数据结构的区别及其不同的应用建议. 二者区别 备注:先说下,在MySQL文档里,实际上是把B+树索引写成了BTRE ...
- MySQL 索引 :哈希索引、B+树索引、最左前缀匹配规则、全文索引
文章目录 索引 什么是索引 索引优缺点与适用场景 常见的索引 哈希索引 自适应哈希索引 B+树索引 聚集索引 非聚集索引 使用方法 联合索引 最左前缀匹配规则 覆盖索引 全文索引 使用方法 索引 什么 ...
- MySQL 索引 :哈希索引、B+树索引、全文索引
文章目录 索引 引言 常见的索引 哈希索引 自适应哈希索引 B+树索引 聚集索引 非聚集索引 使用方法 联合索引 最左前缀匹配规则 覆盖索引 全文索引 使用方法 索引 引言 为什么需要索引? 倘若不使 ...
- MySQL B+树索引和哈希索引介绍
* GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 索引介绍 索引是一种特殊的数据库结构,被设计用来快速查询数据库表中的特定记录.索引有多种类型,就像字典有拼音查找和偏旁 ...
- B+树索引和哈希索引
转自:https://www.cnblogs.com/zengkefu/p/5647279.html 导读 在MySQL里常用的索引数据结构有B+树索引和哈希索引两种,我们来看下这两种索引数据结构的区 ...
- B+树索引和哈希索引的区别——我在想全文搜索引擎为啥不用hash索引而非得使用B+呢?...
哈希文件也称为散列文件,是利用哈希存储方式组织的文件,亦称为直接存取文件.它类似于哈希表,即根据文件中关键字的特点,设计一个哈希函数和处理冲突的方法,将记录哈希到存储设备上. 在哈希文件中,是使用一个 ...
- 数据库中的索引技术——哈希索引
1.哈希索引 哈希索引(hash index)基于哈希表实现,只有精确匹配索引所有列的查询才有效.对于每一行数据,存储引擎都会对所有的索引列计算一个哈希码(hash code),哈希码是一个较小的值, ...
- mysql单列索引和多列索引_浅谈MySQL索引优化
索引基础知识总结及常见索引优化手段 一.索引简介 什么是索引? MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构. 可以简单理解为"排好序的快速查找数据 ...
最新文章
- 前端和后端的英文_计算机专业的本科生在前端、后端、测试和运维之间该如何选择...
- 腾讯云数据库TDSQL-学习心得与收获
- matlab中转置矩阵的特征值,矩阵乘以矩阵的转置运算的解析
- 云呐|国有资产管理信息系统,资产管理信息系统功能描述
- emc整改措施及案例_EMC整改案例分享
- 用支付宝和微信都可以扫的聚合支付码其原理是什么?云收呗的原理也很简单,API搭建比较方便,云收呗是最大的黑天鹅
- HTML5表单新特征简介与举例
- [Excel 与 股票] 一图胜千言之 Excel 处理股票数据
- FFplay文档解读-20-音频过滤器五
- 北京市区最大天然冰场今开放
- 史上最糟糕简历:长度超过一页 使用过多术语
- 中控集团杭州深蓝数智专场 — 纯前端表格技术应用研讨会
- 王者荣耀站力查询接口(每日更新)
- [转]文本相似性算法:simhash/minhash/余弦算法
- 文字转语音软件哪个好用
- 3月份不良与垃圾信息举报:垃圾邮件占31.7%
- uni-app踩坑日记
- React(8)-组件ref引用
- C#通过AMO对象模型浏览SQL SERVER 2005 SSAS角色一例
- 泼辣修图Polarr5.11.4 版,让你的创意无限延伸