当前位置: 首页 > news >正文

浅谈Mysql的哈希索引及特点

目录

哈希索引

哈希索引的特点

哈希索引的性能

InnoDB中的自适应哈希索引

InnoDB自适应哈希索引开关


在InnoDB存储引擎中一般使用的是B+树索引。

其实mysql中还有另一种常见的索引即哈希索引;在Memory存储引擎中就支持哈希索引。

同时,在InnoDB存储引擎中也支持自适应哈希索引,这个是引擎层做的优化,不可人为控制,但也可以与B+树索引共同使用提升查询效率。

哈希索引

数据库中哈希索引是基于哈希表实现的,对于哈希索引列的数据通过 Hash 算法计算,得到对应索引列的哈希码形成哈希表,由哈希码及哈希码指向的真实数据行的指针组成了哈希索引。

哈希索引的特点

哈希索引只适用于等值查询,不支持范围查询。等值查询包括 =、IN()、<=> (安全等于, select null <=> null 和 select null=null 是不一样的结果)

哈希索引的性能

哈希索引的性能跟哈希冲突数量成反比,哈希冲突越多其维护代价越大性能越低 。Hash 碰撞通用的处理方法是使用链表,将 Hash 冲突碰撞的元素形成一个链表,发生冲突时在链表上进行二次遍历找到数据。

Hash 碰撞跟选择的 Hash 算法有关系,为了减少 Hash 碰撞的概率,优先选择避免 Hash 冲突的 Hash 算法,例如,使用 Percona Server 的函数 FNV64() ,其哈希值为 64 位,出现 Hash 冲突的概率要比 CRC32 小很多。

InnoDB中的自适应哈希索引

InnoDB 自适应哈希索引是为了提升查询效率,InnoDB 存储引擎会监控表上各个索引页的查询,当 InnoDB 注意到某些索引值访问非常频繁时,会在内存中基于 B+Tree 索引再创建一个哈希索引,使得内存中的 B+Tree 索引具备哈希索引的功能,即能够快速定值访问频繁访问的索引页。

为什么要为 B+Tree 索引页二次创建自适应哈希索引呢?

因为 B+Tree 索引的查询效率取决于 B+Tree 的高度,在数据库系统中通常 B+Tree 的高度为 3~4 层,所以访问数据需要做 3~4 次的查询。而 Hash 索引访问通常一次查找就能定位数据(无 Hash 碰撞的情况),其等值查询场景 Hash 索引的查询效率要优于 B+Tree。

InnoDB自适应哈希索引开关

InnoDB 自适应哈希索引的功能,用户只能选择开启或关闭功能,无法进行人工干涉。

功能开启后可以通过 Show Engine Innodb Status 看到当前自适应哈希索引的使用情况:

Hash table size 276707, node heap has 0 buffer(s)

0.00 Hash searches/s, 0.00 non-Hash searches/s

可以看到 Hash table 的大小,使用情况及每秒使用 AHI 和非 AHI 搜索的情况。

http://www.jsqmd.com/news/793526/

相关文章:

  • Python+AI
  • 【限时解密】SITS大会未公开议程泄露:下一代缓存协议Cache-LLMv2将于Q3强制接入HuggingFace生态?
  • 《如果你还愿意等》的搜索理由:等待场景怎样被记住
  • 创业公司利用Taotoken多模型能力进行A/B测试以优化产品效果
  • 基于Dify工作流构建游戏客服多智能体协作系统实践
  • CANN/asc-devkit:__ll2float_ru函数
  • AI原生Embedding优化黄金公式(SITS 2026认证级调优框架首次公开)
  • SunEditor自定义插件开发:从零开始构建你的专属功能
  • Windows AI智能体安全沙盒:MachineY Engine四层隔离与部署指南
  • 大语言模型合并实战:用mergekit融合Llama与WizardLM构建全能AI
  • 终极django-htmx性能优化指南:如何减少网络请求并提升用户体验 [特殊字符]
  • CANN/asc-devkit类型转换函数文档
  • 混合量子计算:qumode与qubit协同架构解析
  • CANN Ascend C断言函数API文档
  • SREWorks网关组件详解:构建高可用微服务治理体系 [特殊字符]
  • dnGrep搜索结果分析与报告生成:如何导出和分享搜索数据
  • retrying部署指南:在不同Python版本和环境中的兼容性终极教程
  • ARM Cortex-R7低功耗架构设计与动态RAM保留技术
  • 告别虚拟机!Win10+Ubuntu 18.04双系统保姆级安装指南(含BIOS设置与分区避坑)
  • Godot 3 Demos保存系统实战:游戏数据持久化与配置管理终极指南
  • Docker Compose多项目管理利器:compose-skill配置与实战指南
  • CANN/ge ACL设置张量常量
  • ClosureTree 在企业级应用中的最佳实践:高效构建 ActiveRecord 层级模型
  • 独立开发者如何用AI验证创业点子:15分钟完成市场分析与风险评估
  • 电力线通信(PLC)技术原理与应用解析
  • ARM GICv3中断控制器与ICC_BPR1寄存器详解
  • Ciao TLS证书监控:如何避免SSL证书过期导致的服务中断
  • AI系统不再“幻觉即上线”:SITS 2026定义的10大可观测性设计模式,含实时语义漂移熔断机制
  • CANN ops-math ReduceAny算子
  • KeyMapper终极指南:重新定义Android设备按键功能的完整教程