一、介绍  

  哈希(hash)是一种非常快的查找方法,一般情况下查找的时间复杂度为O(1)。常用于连接(join)操作,如Oracle中的哈希连接(hash join)。

  InnoDB存储引擎会监控对表上索引的查找,如果观察到建立哈希索引可以带来速度的提升,则建立哈希索引,所以称之为自适应(adaptive)的。

自适应哈希索引通过缓冲池的B+树构造而来,因此建立的速度很快。而且不需要将整个表都建哈希索引,InnoDB存储引擎会自动根据访问的频率

和模式来为某些页建立哈希索引。

二、示例

三、限制

1.只能用于等值比较,例如=, <=>,in

2.无法用于排序

3.有冲突可能

4.Mysql自动管理,人为无法干预。

四、通过SHOW ENGINE INNODB STATUS 查看自适应哈希索引的使用情况

In MySQL 5.7, the adaptive hash index search system is partitioned. Each index is bound to a specific partition, and each partition is protected by a separate latch.

Partitioning is controlled by the innodb_adaptive_hash_index_parts configuration option. In earlier releases, the adaptive hash index search system was

protected by a single latch which could become a point of contention under heavy workloads. The innodb_adaptive_hash_index_parts option is set to 8 by default.

The maximum setting is 512.

The hash index is always built based on an existing B-tree index on the table. InnoDB can build a hash index on a prefix of any length of the key defined for the B-tree,

depending on the pattern of searches that InnoDB observes for the B-tree index. A hash index can be partial, covering only those pages of the index that are often accessed.

You can monitor the use of the adaptive hash index and the contention for its use in the SEMAPHORES section of the output of the SHOW ENGINE INNODB STATUS

command. If you see many threads waiting on an RW-latch created in btr0sea.c, then it might be useful to disable adaptive hash indexing.

-------------------------------------
INSERT BUFFER AND ADAPTIVE HASH INDEX
-------------------------------------
Ibuf: size 1, free list len 0, seg size 2, 94 merges
merged operations:insert 280, delete mark 0, delete 0
discarded operations:insert 0, delete mark 0, delete 0
Hash table size 4425293, node heap has 1337 buffer(s)
174.24 hash searches/s, 169.49 non-hash searches/s

哈希索引只能用来搜索等值的查询,对于其他查找类型,如范围查找,是不能使用哈希索引的,因此这里出现no--hash searches的情况。

通过hash searches:non-hash searches可以大概了解使用哈希索引后的效率

参考

mysql reference : adaptive hash index

同类文章:

mysql 索引

来源:https://www.cnblogs.com/yuyutianxia/p/3841657.html

MySql 自适应哈希索引相关推荐

  1. MySQL中的自适应哈希索引

    众所周知,InnoDB使用的索引结构是B+树,但其实它还支持另一种索引:自适应哈希索引. 哈希表是数组+链表的形式.通过哈希函数计算每个节点数据中键所对应的哈希桶位置,如果出现哈希冲突,就使用拉链法来 ...

  2. mysql源码自适应哈希索引_MySQL 自适应哈希索引

    一.介绍 哈希(hash)是一种非常快的查找方法,一般情况下查找的时间复杂度为O(1).常用于连接(join)操作,如Oracle中的哈希连接(hash join). InnoDB存储引擎会监控对表上 ...

  3. mysql hash创建_Mysql自适应哈希索引(Adaptive Hash Index)创建的条件

    官方文档: If a table fits almost entirely in main memory, a hash index can speed up queries by enabling ...

  4. 什么是Mysql的next-key、插入缓冲、二次写、自适应哈希索引和预读

    目录 楔子 一.间隙锁(Next-Key锁) 二.插入缓冲(Insert Buffer) 2.1.什么是insert buffer? 2.2.insert buffer的触发条件? 2.3.为什么不能 ...

  5. 【MySQL】Innodb存储引擎关键特性之——自适应哈希索引和异步IO

    自适应哈希索引(AHI) 问题背景 众所周知,Innodb存储引擎索引底层数据结构是B+树,而B+树查找的时间复杂度取决于B+树的高度.而有一种数据结构,它查找的时间复杂度是O(1),那就是--数组. ...

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

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

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

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

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

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

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

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

最新文章

  1. 未来黑客入侵的不仅有电脑,还有人脑?
  2. pandas中align函数的使用示例
  3. 二代测序组装PK三代测序组装
  4. 第一阶段团队成员贡献打分
  5. article.app.php,【求助】修改app\portal\AdminArticle.php二次开发提交数据出错的疑问
  6. 树剖+线段树||树链剖分||BZOJ1984||Luogu4315||月下“毛景树”
  7. 【Groovy】编译时元编程 ( ASTTransformation#visit 方法中访问 Groovy 类、方法、字段、属性 | 完整代码示例及进行编译时处理的编译过程 )
  8. HuggingFace-transformers系列的介绍以及在下游任务中的使用
  9. docker mysql镜像连接不上_还在手动安装应用?试一下Docker
  10. mysql优化参数设置_MySQL服务优化参数设置参考
  11. 毫米波雷达和车联网在未来无人驾驶中的应用和比较
  12. WPF 用代码实现WrapPanel右侧自动对齐(解决多余空白问题)
  13. python帮助文档在哪_python文档之查看帮助文档方法
  14. 2008 Round1AA Minimum Scalar Product
  15. turtle fillcolor_超详细!turtle库的使用
  16. android文件读取文件内容,android创建txt文件,读取txt文件内容
  17. PyQt5快速入门教程4-QtDesigner设计登录界面
  18. 2021年全国姓名报告出炉,你的姓与名上榜了吗?
  19. Excel应用技巧:不规则合并单元格之批量填充序列
  20. stm32f103r6最小系统原理图_stm32f103rct6最小系统原理图

热门文章

  1. linux上的ftp怎么设置编码格式,linux ftp客户端的编码问题
  2. HBase不同版本集群之间数据迁移
  3. [微信开发] 微信网页授权Java实现(https://www.cnblogs.com/lovebread/p/5513241.html)
  4. zookeeper基本原理及适用场景 转:http://blog.chinaunix.net/uid-26748613-id-4536290.html
  5. 第十二天:规划成本管理,成本类型, 资产折旧;和 估算成本,估算成本知识点提示
  6. 3.游戏优化(CCSpriteBatchNode)
  7. 网站用户访问速度监测分析项目
  8. Struts2异常处理机制
  9. 将虚拟机的版本改为1.6的方法
  10. Linux sed 写命令常见使用案例