MySQL索引的Index method中btree和hash的区别

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

在MySQL中,大多数索引(如 PRIMARY KEY,UNIQUE,INDEX和FULLTEXT)都是在BTREE中存储,但使用memory引擎可以选择BTREE索引或者HASH索引,两种不同类型的索引各自有其不同的使用范围。

Hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-Tree 索引。

可能很多人又有疑问了,既然 Hash 索引的效率要比 B-Tree 高很多,为什么大家不都用 Hash 索引而还要使用 B-Tree 索引呢?任何事物都是有两面性的,Hash 索引也一样,虽然 Hash 索引效率高,但是 Hash 索引本身由于其特殊性也带来了很多限制和弊端,主要有以下这些。

(1)Hash 索引仅仅能满足”=”,”IN”和”<=>”查询,不能使用范围查询。

由于 Hash 索引比较的是进行 Hash 运算之后的 Hash 值,所以它只能用于等值的过滤,不能用于基于范围的过滤,因为经过相应的 Hash 算法处理之后的 Hash 值的大小关系,并不能保证和Hash运算前完全一样。

(2)Hash 索引无法被用来避免数据的排序操作。

由于 Hash 索引中存放的是经过 Hash 计算之后的 Hash 值,而且Hash值的大小关系并不一定和 Hash 运算前的键值完全一样,所以数据库无法利用索引的数据来避免任何排序运算;

(3)Hash 索引不能利用部分索引键查询。

对于组合索引,Hash 索引在计算 Hash 值的时候是组合索引键合并后再一起计算 Hash 值,而不是单独计算 Hash 值,所以通过组合索引的前面一个或几个索引键进行查询的时候,Hash 索引也无法被利用。

(4)Hash 索引在任何时候都不能避免表扫描。

前面已经知道,Hash 索引是将索引键通过 Hash 运算之后,将 Hash运算结果的 Hash 值和所对应的行指针信息存放于一个 Hash 表中,由于不同索引键存在相同 Hash 值,所以即使取满足某个 Hash 键值的数据的记录条数,也无法从 Hash 索引中直接完成查询,还是要通过访问表中的实际数据进行相应的比较,并得到相应的结果。

(5)Hash 索引遇到大量Hash值相等的情况后性能并不一定就会比B-Tree索引高。

对于选择性比较低的索引键,如果创建 Hash 索引,那么将会存在大量记录指针信息存于同一个 Hash 值相关联。这样要定位某一条记录时就会非常麻烦,会浪费多次表数据的访问,而造成整体性能低下。

转载于:https://my.oschina.net/henrydong/blog/161861

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/547379.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle 11g数据库管理与开发指南

为什么80%的码农都做不了架构师&#xff1f;>>> Oracle 11g数据库管理与开发指南 本书内容系统而全面&#xff0c;详细讲解了Oracle数据库的管理、开发、性能优化、以及PL/SQL 编程的相关知识&#xff0c;面面俱到&#xff1b;注重实战&#xff0c;为每个知识…

SQL Server 跨网段(跨机房)复制

一.本文所涉及的内容&#xff08;Contents&#xff09; 本文所涉及的内容&#xff08;Contents&#xff09;背景&#xff08;Contexts&#xff09;解决方案&#xff08;Solution&#xff09;搭建过程&#xff08;Process&#xff09;注意事项&#xff08;Attention&#xff09;…

Twitter Storm安装配置(Ubuntu系统)单机版

要使用storm首先要安装以下工具&#xff1a;JDK、Python、zookeeper、zeromq、jzmq、storm &#xff08;注&#xff1a;各个模块都是独立的&#xff0c;如果安装失败或者卡顿可以单独百度某个模块的安装&#xff0c;都是可以的。&#xff09; JDK1.7安装 参见上篇《Ubuntu下安…

计算机中隐藏的文件找不到了怎么办,隐藏文件夹找不到了怎么办【图解】

在今天&#xff0c;越来越多的人利用电脑来办公。甚至有一些工作&#xff0c;已经与电脑密切相关了。电脑以其强大的功能辅助人们工作&#xff0c;但有时在操作过程中会碰到这样或那样的问题。这个时候人们就会叹其操作的复杂性。就好比如有时你隐藏了一个文件&#xff0c;可是…

CentOS6 配置 yum 阿里源

一、CentOS6停止维护更新日期2020年11月30日 二、2020年12月2日下架了包括官方所有的CentOS6源&#xff08;包括国内的镜像站&#xff09; 三、CentOS6也完成了它的历史使命 在生产的环境中依旧由很多CentOS6系统依然在坚持&#xff0c;那么可以采取挂载光盘或者使用centos-va…

使用ab进行页面的压力测试

ab是apache自带的一个很好用的压力测试工具&#xff0c;当安装完apache的时候&#xff0c;就可以在bin下面找到ab 参数说明及示例 我们可以模拟100个并发用户&#xff0c;对一个页面发送1000个请求 输入命令&#xff1a;ab -n1000 -c100 http://stone_w.cnblogs.com/ 其中-n代…

取消计算机触摸板,笔记本电脑触摸板,详细教您笔记本电脑触摸板怎么关闭

很多的笔记本的用户都习惯使用鼠标&#xff0c;主要是因为笔记本触摸板操作不太方便&#xff0c;没有鼠标操作灵活。反而是经常在电脑中打字等操作时容易误碰到笔记本触摸板&#xff0c;导致输入错误等等&#xff0c;因此很多朋友一般会关闭触摸板&#xff0c;可是笔记本触摸板…

OC学习笔记--基础篇

本文简要介绍了一些oc的基础类型&#xff0c;包括数组、字典、字符串、消息传递、类、对象、方法、属性、协议和转发&#xff0c;希望对你有帮助。 OC数据类型 打印—类似print NSlog("hello word");数组 NSMutableArray &#xff08;可变数组&#xff09;和 NSAr…

PL/SQL Developer中文版下载以及使用图解(绿色版)

下载地址&#xff1a;http://pan.baidu.com/s/1eQCTmkM 1、运行plsqldev.exe程序&#xff1b; 2、设置Oracle主目录名/OCI库地址&#xff0c;如图&#xff1a; 重新启动程序。 3、配置登陆信息&#xff0c;连接数据库&#xff0c;如图&#xff1a;

实例应用 自定义页面taglib标签

关于继承TagSupport与BodyTagSupport的区别说明 * <code>TagSupport</code>与<code>BodyTagSupport</code>的区别主要是标签处理类是否需要与标签体交互。 * 如果不需要交互的就用<code>TagSupport</code>&#xff0c;如果需要交互就用<…

Express框架使用以及数据库公共操作类整理(Win7下的NodeJs)

具体步骤&#xff1a; 1、安装开发工具WebStorm&#xff1b; 2、安装node/npm&#xff08;下载地址&#xff1a;https://nodejs.org/download/&#xff09;选择适合你的xxx.mis安装&#xff1b; 3、安装express框架(cmd窗口模式&#xff0c;用npm命令执行&#xff1a;npm in…

SimpleITK使用深度学习识别肺癌CT DICOM数据集

肺癌数据集DICOM &#xff1a;https://wiki.cancerimagingarchive.net/display/Public/LIDC-IDRI 首先用SimpleITK把mhd图片读入&#xff0c;对每个切片使用Gaussian filter然后使用阈值-600把肺部图片二值化&#xff0c;然后再分析该切片的面积&#xff0c;去掉面积小于30mm2的…

MemCache在win7上的可视化配置以及Nodejs/Net应用

惯例科普&#xff1a;MemCache是一套分布式的高速缓存系统&#xff0c;由LiveJournal的Brad Fitzpatrick开发&#xff0c;但目前被许多网站使用以提升网站的访问速度&#xff0c;尤其对于一些大型的、需要频繁访问数据库的网站访问速度提升效果十分显著。这是一套开放源代码软件…

Redis在win7上的可视化应用

Redis是一个key-value存储系统。和Memcached类似&#xff0c;它支持存储的value类型相对更多&#xff0c;包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash&#xff08;哈希类型&#xff09;。这些数据类型都支持push/pop、add/remove及取交集并…

全网最详细的docker配置nginx http2 优化高速访问

Nginx 从 1.13.9 版本开始加入了 HTTP/2 的 Server Push 功能&#xff0c;本文将介绍如何在 Nginx 下实现 HTTP/2 服务器推送 (Server Push) 。这里我们首先用 Docker 搭建一个支持 HTTP/2 的 Server Push 功能的 Nginx 容器并加入 SSL 证书。如果你还不会 Docker&#xff0c;可…

CentOS安装运行NodeJS框架Express

安装依赖包 yum -y install gcc make gcc-c openssl-devel wget 下载/解压NodeJs wget http://nodejs.org/dist/v0.12.7/node-v0.12.7.tar.gztar -zvxf node-v0.12.7.tar.gz 编译及安装&#xff0c;逐行执行 cd node-v0.12.7./configuremake install 验证是否安装配置成功&…

android点滴27:R文件无法加载 R cannot be resolved to a v...

2019独角兽企业重金招聘Python工程师标准>>> 导致这个问题原因可能有二个&#xff1a;1. manifest文件中的包名和真正的报名不统一 2. 在java文件中导入了R文件&#xff0c;在java文件中无需导入任何包的R文件&#xff0c;系统会自动加载gen目录下的R文件。 转载于…

MITK医学Python开发入门详细版

1.关于MITK&#xff1a; MITK的全称是”The Medical Imaging Interaction Toolkit”。它是一款开源的交互式医学图像处理软件开发和应用平台。MITK将ITK和VTK整合为一个应用框架。该软件由德国一个研究室开发。官网地址为&#xff1a;http://mitk.org/wiki/MITK 。 与MITK同名…

服务器系统上1068错误,错误1068,详细教您启动网络服务错误1068怎么解决

在电脑中&#xff0c;通常开机后就会自动连接网络宽带&#xff0c;不过有用户遇到问题。开机后网络图标显示红叉或者图标正常无法上网&#xff0c;打开网络和共享中心才发现是服务或者组无法启动&#xff0c;启动时显示错误1068&#xff0c;这该怎么办&#xff1f;下面&#xf…

NodeJs连接Oracle数据库

nodejs连接oracle数据库&#xff0c;各个平台的官方详情文档&#xff1a;https://github.com/oracle/node-oracledb/blob/master/INSTALL.md 我的nodejs连接Oracle的配置&#xff0c;运行环境: windows7 x64 nodejs 0.12.7 Python 2.7.10 npm 2.11.3 运行原理分析 npm调…