zoukankan      html  css  js  c++  java
  • 9 innodb关键特性之自适应哈希索引03

    1.前言

      哈希是一种非常快的查找方法,在一般情况下这种查找的时间复杂度为O(1),即一般仅需要一次查找就能定位数据,而B+树的查找次数,取决于B+树的高度,在生产环境中,B+树的高度一般为3~4层,故需要3~4次查询。

    2.Adaptive Hash index(AHI)

      innodb存储引擎会监控对表上个索引页的查询。如果观察到建立哈希索引可以带来速度提升,则建立哈希索引,称为为自适应哈希索引。AHI是通过缓冲池的B+树页构造而来,因此建立的速度很快,而且不需要对整张表构建哈希索引。innodb存储引擎会自动根据访问的频率和模式来自动地为某些热点页建立哈希索引。

    3.自适应哈希索引要求

      AHI有一个要求,即对这个页的连续访问模式必须是一样的,例如(a,b)的联合索引页,其访问模式可以是以下情况

    • where a=xxx
    • where a=xxx and b=xxx

    访问模式一样指的是查询条件一样,若交替进行上述两种查询,那么innodb存储引擎不会对该页构造AHI,此外AHI还有如下的要求:

    • 以该模式访问了100次
    • 页通过该模式访问了N次,其中N=页中记录 * 1/16

    根据innodb存储引擎官方的文档显示,启动了AHI之后,读取和写入速度可以提升2倍,辅助索引的连接操作性能可以提升5倍。毫无疑问,AHI是非常好的优化模式,设计的思想是数据库自优化的(self-tuning),即无需要DBA对数据库进行人为调整。

      我们可以通过show engine innodb status命令查看当前AHI的使用情况:  

    Hash table size 34673, node heap has 0 buffer(s)
    Hash table size 34673, node heap has 0 buffer(s)
    Hash table size 34673, node heap has 0 buffer(s)
    Hash table size 34673, node heap has 0 buffer(s)
    Hash table size 34673, node heap has 0 buffer(s)
    Hash table size 34673, node heap has 0 buffer(s)
    Hash table size 34673, node heap has 0 buffer(s)
    Hash table size 34673, node heap has 0 buffer(s)
    0.00 hash searches/s, 0.00 non-hash searches/s            ##这里表示的使用哈希索引的次数和未使用哈希索引的次数

    4.哈希索引的缺陷 

    • 索引存放的是hash值,所以仅支持 < = > 以及 IN 操作
    • hash索引无法通过操作索引来排序,因为存放的时候经过hash计算,但是计算的hash值和存放的不一定相等,所以无法排序
    • 不能避免全表扫描,只是由于在memory表里支持非唯一值hash索引,就是不同的索引键,可能存在相同的hash值
    • 如果哈希碰撞很多的话,性能也会变得很差
    • 哈希索引无法被用来避免数据的排序操作

    参考:http://mysql.taobao.org/monthly/2015/09/01/

       https://zhuanlan.zhihu.com/p/268341368

       http://blog.itpub.net/15498/viewspace-2157462/

         https://blog.csdn.net/cpongo6/article/details/88793524

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

     

  • 相关阅读:
    Maven打包时过滤测试代码或指定特定的测试类(maven-surefire-plugin)
    Maven项目配置外部依赖(本地依赖)
    手把手教你创建「人物角色Persona」
    微服务与Docker介绍
    深入学习微框架:Spring Boot
    技术干货:我们的项目是如何技术选型的
    为什么选择Spring Boot作为微服务的入门级微框架
    Android Material Design 兼容库的使用详解
    Android 实现QQ、微信、新浪微博和百度第三方登录
    Android ijkplayer详解使用教程
  • 原文地址:https://www.cnblogs.com/zmc60/p/15222606.html
Copyright © 2011-2022 走看看