Hash索引和BTree索引区别
Hash索引和BTree索引区别
Hash仅适用于对等比较(=、>、<、>=、<=、between),而BTree可以支持like模糊查询。
不同的引擎支持不同的索引:Innodb和MyISAM默认的索引是BTree索引;而Mermory默认的索引是Hash索引。
1. BTree
BTree索引是最常用的mysql数据库索引算法,因为它不仅可以被用在=、>、<、>=、<=、between这些比较操作符上,还可以用于like操作符。
只要它的查询条件是一个不以通配符开头的常量则该索引生效;否则索引失效。
. Hash
Hah索引只能用于对等比较,例如=、>、<、>=、<=、between。由于是一次定位数据,不像BTree索引需要从根节点到枝节点,最后才能访问到叶节点这样多次IO访问,所以检索效率远高于BTree索引。
但是为什么使用BTree比Hash多呢?
Hash索引仅仅能满足=、>、<、>=、<=、between查询,不能使用范围查询。
联合索引中,Hash索引不能利用部分索引键查询。
对于联合索引中的多个列,Hash要么全部使用,要么全部不适用,并不支持BTree支持的联合索引的最有前缀,也就是联合索引的前面一个或几个索引键进行查询时,Hash索引无法被利用。Hash索引无法避免数据的排序操作。
由于Hash索引中存放的是经过Hash计算之后的Hash值,而且Hash值的大小关系并不一定和Hash运算前的键值完全一样,所以数据库无法利用索引的数据来避免任何排序运算。Hash索引任何时候都不能避免表扫描。
Hash索引是将索引键通过Hash运算之后,将Hash运算结果的Hash值和所对应的行指针信息存放于一个Hash表中,由于不同索引键存在相同Hash值,所以即使满足某个Hash键值的数据的记录条数,也无法从Hash索引中直接完成查询,还是要通过访问表中的实际数据进行比较,并得到相应的结果。Hash索引遇到大量Hash值相等的情况后性能并不一定会比BTree高。
对于选择性比较低的索引键,如果创建Hash索引,那么将会存在大量记录指针信息存于同一Hash值相关联。这样要定位某一条记录时就会非常麻烦,会浪费多次表数据访问,从而造成整体性能低下。Hash索引查找数据基本上能一次定位数据,当然有大量碰撞的话性能也会下降。而BTree索引就得在节点上挨个查找了,很明显在数据精确查找方面Hash索引的效率要高于BTree索引的;
因为Hash算法是基于等值计算的,所以对于like等范围查找Hash索引不支持;
对于BTree支持的联合索引的最有前缀,hash也是无法支持的,联合索引中的字段要么全用要么全不用。
hash不支持索引排序,索引值和计算出来的hash值大小并不一定一致。
Hash索引和BTree索引区别相关推荐
- Hash索引和BTree索引
索引是帮助mysql获取数据的数据结构.最常见的索引是Btree索引和Hash索引. 不同的引擎对于索引有不同的支持:Innodb和MyISAM默认的索引是Btree索引:而Mermory默认的索引是 ...
- mysql索引btree hash_Hash索引和BTree索引
索引是帮助mysql获取数据的数据结构.最常见的索引是Btree索引和Hash索引. 不同的引擎对于索引有不同的支持:Innodb和MyISAM默认的索引是Btree索引:而Mermory默认的索引是 ...
- Bitmap 索引 vs. B-tree 索引:如何选择以及何时使用?——2-5
--理解适当使用每个索引对性能的影响 Bitmap 索引 vs. B-tree 索引:如何选择以及何时使用?--1-5 Bitmap 索引 vs. B-tree 索引:如何选择以及何时使用?--2-5 ...
- Bitmap 索引 vs. B-tree 索引:如何选择以及何时使用?——4-5
--理解适当使用每个索引对性能的影响 Bitmap 索引 vs. B-tree 索引:如何选择以及何时使用?--1-5 Bitmap 索引 vs. B-tree 索引:如何选择以及何时使用?--2-5 ...
- Mysql Hash索引和B-Tree索引区别(Comparison of B-Tree and Hash Indexes)
上篇文章中说道,Mysql中的Btree索引和Hash索引的区别,没做展开描述,今天有空,上Mysql官方文档找到了相关答案,看完之后,针对两者的区别做如下总结: 引用维基百科上的描述,来解释一下这两 ...
- mysql 的hash和b tree_mysql索引hash索引和b-tree索引的区别
Hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-T ...
- MySQL索引类型 btree索引和hash索引的区别
来源一 Hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 ...
- PostgreSql索引(B-tree索引 Hash索引 GiST索引 SP-GiST索引 GIN 索引 BRIN 索引)
索引 语法: CREATE INDEX test1_id_index ON test1 (id); 索引的名字test1_id_index可以自由选择,但我们最好选择一个能让我们想起该索引用途的名字. ...
- mysql btree检索策略_MySQL之Btree索引和HASH索引的区别以及索引优化策略
索引是帮助mysql获取数据的数据结构.最常见的索引是Btree索引和Hash索引. 不同的引擎对于索引有不同的支持:Innodb和MyISAM默认的索引是Btree索引:而Mermory默认的索引是 ...
最新文章
- python学习笔记:(三)list(列表)常用的内置方法
- C#完美任意设置webBrowser框架默认的IE内核版本
- 文献记录(part91)--A boundary method for outlier detection based on support vector domain description
- DCX读书报告Bring structure to the web有感
- 话说Python:非主流编程语言
- xbox one s驱动_理想照进现实 理想ONE开始接受预定
- @程序员,我最多再等你两天!
- 高级终端termux下载不了Python_在安卓手机上安装Python写的软件是什么体验?
- PlaySound使用进阶
- 图片上打印汉字(C++、OPENCV+字库)
- 干货丨让你更容易影响别人的 52 个小技巧
- 深入探访支付宝双11十年路,技术凿穿焦虑与想象极限 | CYZONE特写...
- java 扫描tcp端口号_Java 端口扫描器 TCP的实现方法
- java裁剪图片_Java实现图片的裁剪
- windows下安装php环境(wampserver)
- python广告点击率预测_推荐系统中的点击率预估 – Advertising Recommendation
- Apk脱壳圣战之---如何脱掉“梆梆加固”的保护壳
- html插入flash时钟,教你利用Flash制作一个会走动的时钟(时针,分针,秒针)
- 实验记录 | BWA的安装
- C语言鼠标操作方法及源码