MySQL: Hash索引优缺点

MySQL: Hash索引优缺点优点:因为索引自身只需存储对应的哈希值,所以索引的结构十分紧凑,这也让哈希索引查找的速度非常快缺点:1、不能避免读取行哈希索引只包含哈希值和行指针,而不存储字段值,所以不能使用索引中的值来避免读取行。不过,访问内存中的行的速度很快,所以大部分情况下这一点对性能的影响并不明显。2、无法用于排序哈希索引数据并不是按照索引值顺序存储的,所以也就无法用于排序。3、无法使用部分索…

大家好,又见面了,我是你们的朋友全栈君。

优点:

因为索引自身只需存储对应的哈希值,所以索引的结构十分紧凑,这也让哈希索引查找的速度非常快

缺点:

1、不能避免读取行

哈希索引只包含哈希值和行指针,而不存储字段值,所以不能使用索引中的值来避免读取行。不过,访问内存中的行的速度很快,所以大部分情况下这一点对性能的影响并不明显。

2、无法用于排序

哈希索引数据并不是按照索引值顺序存储的,所以也就无法用于排序。

3、无法使用部分索引列匹配查找

哈希索引也不支持部分索引列匹配查找,因为哈希索引始终是使用索引列的全部内容来计算哈希值的。例如,在数据列(A,B)上建立哈希索引,如果查询只有数据列A,则无法使用该索引。

4、只支持等值查找

哈希索引只支持等值比较查询,包括=、IN()、<=>(注意<>和<=>是不同的操作)。也不支持任何范围查询,例如WHERE price>100。

5、存在Hash冲突

访问哈希索引的数据非常快,除非有很多哈希冲突(不同的索引列值却有相同的哈希值)。当出现哈希冲突的时候,存储引擎必须遍历链表中所有的行指针,逐行进行比较,直到找到所有符合条件的行。

同时,当哈希冲突很多的时候,一些索引维护操作的代价也会很高。例如,如果在某个选择性很低(哈希冲突很多)的列上建立哈希索引,那么当从表中删除一行时,存储引擎需要遍历对应哈希值的链表中的每一行,找到并删除对应行的引用,冲突越多,代价越大。

 

综上,Hash索引只适用于某些特定的场景(也就是说实际使用中用得非常少-_-!)

以上内容摘自《高性能MySQL》

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/141248.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 如何运行一个vue项目(github安装项目依赖)

    1.cd到package.json目录中,执行npmoutdatedPackageCurrentWantedLatestLocation包名当前版本满足semer版本的最高版本(及在兼容的前提下能更新的最高版本)当前最高的版本红色:可以立即更新黄色:需要进行兼容,慎重更新全部更新在已有项目中,不建议采用全部更新,推荐使用npmupdate按需更新安装ncu,执行npminstall-gnpm-check-updates执行ncu-u

    2022年4月16日
  • ios android 一键换机,‎App Store 上的“手机搬家 – 一键换机助手”

    ios android 一键换机,‎App Store 上的“手机搬家 – 一键换机助手”极速数据迁移,一键手机克隆,换机更便捷。数据传输工具,一键传输通讯录、照片、视频至新手机,超实用的手机一键搬家工具!没有WiFi?新旧手机换机太麻烦?流量不够用?传大文件太慢?没关系,快来试试!最酷最快的多功能文件传输应用!让你在手机间畅享极速互传。传资料不需要联网、不需要电脑、不需要数据线、不需要SIM卡、不需要WIFI,就可以一键把旧手机资料换到新手机。【给您安全、快速、简单、便捷的换机体验…

    2022年5月9日
  • Python 能做什么?「建议收藏」

    Python 能做什么?「建议收藏」Python能做什么?Python具有简单、易学、免费、开源、可移植、可扩展、可嵌入、面向对象等优点,我所关注的是网络爬虫方面,2018即将到来,我准备步入python的世界。Hello,wor

    2022年7月3日
  • 基于Docker的Kafka集群搭建

    基于Docker的Kafka集群搭建1.pulldocker,在机器上下载最新版本的kafka和zookeeper镜像,这里使用的是wurstmeister的镜像dockerpullwurstmeister/kafkadockerpullwurstmeister/zookeeper2.装好的docker镜像3.启动zk容器Dockerrun–d–namezookeeper–p2181:…

    2022年6月9日
  • java如何将字符串转化为日期_java如何将字符串转为日期「建议收藏」

    java如何将字符串转化为日期_java如何将字符串转为日期「建议收藏」一、概述将Java中字符串“2010年1月2日”格式的转换为日期的最佳方法是什么?最终,我想将月份,日期和年份分解为整数,以便可以使用Datedate=newDate();date.setMonth()..date.setYear()..date.setDay()..date.setlongcurrentTime=date.getTime();将日期转换为时间。二、详解java.u…

    2022年10月31日
  • [RoCE]Flow Control

    [RoCE]Flow Control概览RoCE可以实现lossless无损网络环境,在二层网络上做到可靠网络传输,从而对原本在光纤网络环境下的应用在以太网环境下提供相同的服务,而不必对应用逻辑和上层协议更改。实现无损的方法有GlobalPause,PFC,DroplessReceiveQueue。1.什么是802.3xFlowControl(GlobalPause)?以太网标准(802.3)设计时是不可…

    2022年5月20日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号