MySQL自适应Hash索引_串一串cc的博客-程序员秘密

Hash索引

Hash是一种查找数据非常快的数据结构,在正常情况下这种查找的时间复杂度为O(1),即一般仅需要一次查找就能定位数据,正常情况是指不存在哈希冲突的情况;而B+树的查找次数,取决于B+树的高度,B+树的高度一般为34层,所以一般最少需要34次的查询。

InnoDB的Hash索引

InnoDB存储引擎会监控对表上各索引页的查询,如果监控到某个索引页被频繁查询,并诊断后发现如果为这一页的数据创建Hash索引会带来更大的性能提升,则会自动为这一页的数据创建Hash索引,并称之为自适应Hash索引。自适应Hash是通过缓冲池中B+树的页进行构建的,建立速度很快,不需要对整张表的数据都构建Hash索引,所以我们又可以把自适应Hash索引看成是索引的索引,。注意一点就是InnoDB只会对热点页构建自适应索引,且是由InnoDB自动创建和删除的,所以不能人为干预是否在一张InnoDB的表中创建Hash索引。

自适应Hash索引

官方有告诉我们每一种存储引擎所支持的索引结构,在https://dev.mysql.com/doc/refman/5.7/en/create-index.html中可以查看,我们截图保留下:

image-20200409150053986

我们可以看到MyIsam和InnoDB仅支持BTree结构的索引,但是我们在创建的时候却有Hash结构可选择,这是因为啥?细心的话可以发现不论我们在创建索引的时候选择了Hash还是BTree,在保存的时候都会自动转换成BTree,就是这个原因。

但是我们又在官方的https://dev.mysql.com/doc/refman/5.7/en/innodb-adaptive-hash.html页面看到这么一句话:

image-20200409150834710

大致意思是:自适应Hash索引特征能使InnoDB在具有适当的工作负载和足够缓冲池内存的系统上执行的更像内存中的数据库的操作,且不会牺牲事务特性或可靠性,MySQL能基于监视到的搜索规则,使用索引键的前缀构建Hash索引,前缀可以是任意长度,并且可能只有b+树中的某些值出现在Hash索引中,Hash索引其实就是对经常访问的索引页进行构建的。

这又说明其实InnoDB是支持Hash索引的,但并不是真正意义上的Hash,而是通过自己的监视情况自动对某些热点索引值构建的内存Hash。

开启和关闭

默认情况下自适应索引是开启状态,毕竟是可以提升性能的嘛,我们也可以通过命令开启和关闭,并可以查看自适应索引的

  • 开启

    默认就是开启的,可以通过命令show variables like 'innodb_adaptive_hash_index';查看自适应哈希索引的状态,并可以在命令行通过show engine innodb status\G查看自适应Hash索引的使用信息(AHI的大小,使用情况,每秒使用AHI搜索的情况等等)

    image-20200409154256344
  • 关闭

    负载较重的情况下,就不太适合开启自适应Hash索引了,因为这样可以避免额外的索引维护带来的开销,可以在启动的时候通过参数--skip-innodb-adaptive-hash-index关闭

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/luxiaoruo/article/details/106637298

智能推荐

hive各种join(leftouterjoin、join、fullouterjoin)_hivd left join_buster2014的博客-程序员秘密

文章来源:http://www.it165.net/database/html/201408/7812.html一、概念1、左连接 left outer join以左边表为准,逐条去右边表找相同字段,如果有多条会依次列出2、连接join找出左右相同同的记录3、全连接 full outer join包括两个表的join结果,左边在右边中没找

[DirectX] Microsoft Visual Studio 2010 配置 DirectX 开发环境_visual studio 2022 添加directx sdk_龙飞小相公的博客-程序员秘密

很久之前就想尝试一下制作游戏了,但是课程之多都没有什么时间来真正去学习,就当是自己的一个爱好吧!需要设计游戏,搭建其编译运行环境当然是第一步,这里我将会简单地说明一下 VS2010 + DirectX 的编译环境。有以下步骤:1. 下载 DirectX SDK,并安装。2. 设置 VS2010。1. 下载 DirectX SDK,并安装我安装的是Microsoft Di

关于Reporting bugs的一些知识_reporting-bugs_ek2wp06d的博客-程序员秘密

写错误报告非常有用。有几个步骤可以帮助创建最好的错误报告:寻找一个类似现有的票,并确保你没有已经报道的问题,或者还没有固定的存储库中。包含详细说明如何复制错误。这可能是测试用例的形式或代码片段演示了这一问题。没有重现问题,意味着它不太可能得到解决。给尽可能多的细节你环境:(操作系统,PHP版本,CakePHP版本)。不要使用票系统要求支持的问题。使用

RuleEngine -- 一款使用简单,入门方便的数据库规则引擎_chenym196310的博客-程序员秘密

规则引擎是嵌入在应用程序中的组件,实现了决策逻辑和业务系统的分离功能。在现实业务场景中,决策逻辑的复杂性和可变性,使得决策引擎的应用越来越多,把决策逻辑单独分离出来也显得越来越重要了。 目前市场上常用的规则引擎有Ilog JRules,Drools,Jess,Visual Rules等。Il...

windows环境下编译caffe遇到的问题以及处理方法_gflags.overlay-x64_mingo_敏的博客-程序员秘密

本文地址:https://blog.csdn.net/shanglianlm/article/details/80144225 1 微软caffe下载地址: https://github.com/Microsoft/caffe 1-1 error MSB4062: 未能从程序集error MSB4062: 未能从程序集 E:\NugetPackages\OpenCV.2.4.1...

随便推点

eclipse java程序写好了,点击运行后无反应,没有弹出运行框?_eclipse运行java程序没反应_爱敲代码的小黄的博客-程序员秘密

这个很简单,找到eclipse中最上面的一栏,有一个Windows栏,点击之后,在出现的一栏中,有一个Show View 鼠标放上去之后有一个Console,点击就可以看见运行框了...

jmeter调用python脚本执行接口自动化_qq_40999727的博客-程序员秘密

一、如果实现通过jmeter调用python脚本步骤:(1)jmeter配置csv文件,输入自己需要测试的数据需要注意的是:如果测试数据里有中文,文件编码格式要是中文的(2)添加计数器,用于python脚本获取excel表格索引用(3)添加接口请求,将请求的名称用参数显示,在配置文件中写上测试用例的名称;获取请求后的响应结果(4)添加OS Process Sampler:通过创建...

向何志强学习什么(母校学报)_weixin_30739595的博客-程序员秘密

向何志强学习什么(母校学报)2005年10月29日 向何志强学习什么李滟2005年9月15日最近一段时间,一个平凡的大学生的名字何志强在校园内外广为传颂。他虽然没有惊天动地的壮举,但他大义至孝的传统美德和自强不息的时代精神却深深感动了每一个人。9月7日,济源日报在一版刊发了长篇通讯<<好一个何志强>>,此文情深意切的把何志强的事迹展...

Android Material Design悬浮按钮和可交互提示_小红妹的博客-程序员秘密

      博客内容:悬浮按钮FloatingActionButton、交互控件Snackbar和CoordinatorLayout。悬浮按钮FloatingActionButton:       Android Material Design这么叼,肯定会有立体设计咯!在官方的给出的示例中,最简单且最具代表性的立体设计非悬浮按钮莫属,这种按钮不属于主界面平面的一部分,而是位于另外一个维度...

Android android:launchMode=“singleInstance”启动模式设置单例 页面跳转黑屏_一往无前-千夜的博客-程序员秘密

最近在做项目的时候,把Activity的启动模式设置为单例的时候,有时候跳转的时候,会出现一段时间的黑屏.网上搜了一下解决方案,原来这个问题更改下主题就可以了以下是找到的这位大神的解决办法,如果有用,记得点个赞!链接:http://www.cnblogs.com/rayray/archive/2013/03/03/2939060.html将Activity的启动模式设置为s

小球运动动画效果_原ℳ来的博客-程序员秘密

【代码】小球运动动画效果。

推荐文章

热门文章

相关标签