`

基于哈希的索引和基于树的索引有什么区别?

阅读更多
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值相关联。这样要定位某一条记录时就会非常麻烦,会浪费多次表数据的访问,而造成整体性能低下。
分享到:
评论

相关推荐

    索引介绍聚集索引和非聚集索引

    关于索引的介绍,以及b+树结构图,两种索引性能比较,索引优化建议

    基于GPU的内存数据库索引技术研究

    在 GPU上提出基于树层和基于节点索引键 CSB+-树两种并行构建算法,其中后者可实现对CSB+-树的最大并行度构建;通过在 CSB+-树的内部节点添加填充位的方式,可减少GPU 线程块里的线程分支数,从而提高 CSB+-树的查询...

    浅谈innodb的索引页结构,插入缓冲,自适应哈希索引

    下面小编就为大家带来一篇浅谈innodb的索引页结构,插入缓冲,自适应哈希索引。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    LSH技术即位置敏感哈希索引

    LSH技术即位置敏感哈希索引。 相似性搜索是一个问题,给定一个查询,目标是在所有数据库文档中找到与其最相似的文档。在数据科学中,相似性搜索经常出现在 NLP 领域、搜索引擎或推荐系统中,其中需要检索最相关的...

    数据库索引,到底是什么

    • 虽然哈希索引是O(1),树索引是O(log(n)),但SQL有很多“有序”需求,故数据库使用树型索引 • InnoDB不支持哈希索引 • 数据预读的思路是:磁盘读写并不是按需读取,而是按页预读,一次会读一页的数据,每次加载...

    利用哈希索引进行健壮的多关键字文本内容检索-研究论文

    服务器上的数字内容增加了存储和获取问题。 因此,研究人员在该领域进行工作,以组织内容以实现具有数据安全性的... 结果表明,所提出的基于哈希索引和基于tem的检索模型提高了隐私性,并具有与每个查询相关的功能。

    可扩展哈希索引:实现内存中可扩展哈希表

    C ++哈希索引 描述 实现内存中可扩展哈希表。 项目设置 确保将项目安装在计算机上的目录中。 cd进入项目: cd project_name 运行以下命令以使用Makefile编译项目: make all 使用以下命令运行可执行主文件: ./...

    论文研究-云环境中基于相对索引散列树的数据审核方法.pdf

    为了确保云环境外包数据不受窜改,提高数据完整性审核的效率,提出一种基于相对索引散列树(RI-MHT)的数据审核方法,首先修改经典MHT的每个节点以存储两条信息,即数据块的哈希值和节点的相对索引,将MHT与节点的...

    最新150道MySQL大厂面试题课程

    011.什么是自适应哈希索引? 012.什么是2-3树 2-3-4树? 013.说一下自增主键和字符串类型主键的区别和影响 014.使用int自增主键后 最大id是10,删除id 10和9,再添加一条记录,最后添加的id是几? 015.索引的优缺点...

    Hash索引和B+树索引的区别

    文章目录前言B+树HashHash索引与B+树索引的区别总结 前言 我们都知道在MySQL中索引的数据结构有两种,一种是Hash,另一种是BTree。在数据表中建立什么样的索引需要我们根据实际情况进行选择。 B+树 B+树结构示意图:...

    SQL Server2014 哈希索引原理详解

    SQL Server 2014推出的的新索引类型叫做 hash index。介绍hash index之前一定要介绍哈希函数这样会让大家更明白哈希索引的原理,有需要的朋友可以参考下

    论文研究-基于改进的局部敏感哈希算法实现图像型垃圾邮件过滤.pdf

    提出一种快速的图像型垃圾邮件过滤方案,结合半监督机器学习技术改进局部敏感哈希(LSH)算法,基于改进的LSH算法构建垃圾图像特征库索引,提高图像的查找速度。搜集并构造了60 000个垃圾图像样本,实验结果表明,...

    数据结构课程设计C++基于哈希表实现的通讯录系统源码+课程设计报告(95分以上).zip

    数据结构课程设计C++基于哈希表实现的通讯录系统源码+课程设计报告(95分以上).zip本系统为电话号码查找系统,本系统最频繁的操作为查询功能,查询速度的快慢对此系统有至关重要的影响,因此应该选择合适的数据结构...

    mysql面试题(涉及索引、事务、锁)

    Hash索引和B+树所有有什么区别或者说优劣呢? 说说什么是最左匹配? 如何优化慢查询?(explain命令) 分库分表如何选择分表键 分库分表的情况下,查询时一般是如何做排序的? mysql分库分表,水平拆分和垂直拆分,...

    数据依赖的多索引哈希算法

    由于多索引哈希基于数据集中的二进制码呈均匀分布这一假设,不能有效处理非均匀分布的数据集. 针对这一问题,提出数据依赖的多索引哈希算法. 首先把二进制码划分为多个连续不重合的子串,并通过计算二进制码每位...

    matlab中代码意思-hashingSearch:使用哈希索引搜索

    我们在此处提供带有哈希索引(和kNN图)的搜索代码。 该代码在我们的论文中使用。 您需要一个哈希索引和一个kmeans分区才能进行搜索。 请使用各种哈希算法来生成哈希索引和kmeans分区。 基准数据集 性能未经并行测试...

    HASH 索引——用C语言实现

    HASH 索引——用C语言实现,让你充分了解DBMS中索引的实现

    论文研究-移动环境下数据广播中的混合索引技术.pdf

    为了提高移动客户机的电能使用效率,提出结合两种常用的索引技术——树索引和哈希索引的复合性索引模型。该模型既减少了移动客户机的电量消耗,延长了使用时间,同时又保证了访问时间没有大幅增加。最后用JavaSIM...

    数据结构课程设计C++基于哈希表实现的通讯录系统源码+课程设计报告

    数据结构课程设计C++基于哈希表实现的通讯录系统源码+课程设计报告 本系统为电话号码查找系统,本系统最频繁的操作为查询功能,查询速度的快慢对此系统有至关重要的影响,因此应该选择合适的数据结构来进行设计。散...

    学习二进制紧凑代码以用于基于哈希的指纹索引

    学习二进制紧凑代码以用于基于哈希的指纹索引

Global site tag (gtag.js) - Google Analytics