返回顶部
首页 > 资讯 > 数据库 >关于MySQL B+树索引与哈希索引详解
  • 179
分享到

关于MySQL B+树索引与哈希索引详解

2024-04-02 19:04:59 179人浏览 薄情痞子
摘要

目录索引介绍B+树索引优点缺点哈希索引优点缺点补充:二者区别总结 索引介绍 索引是一种特殊的数据库结构,被设计用来快速查询数据库表中的特定记录。索引有多种类型,就像字典有拼

索引介绍

索引是一种特殊的数据库结构,被设计用来快速查询数据库表中的特定记录。索引有多种类型,就像字典有拼音查找和偏旁查找一样都是为了提高检索效率。Mysql中最常见的索引类型有B+树索引 和 哈希索引,下面来简单介绍一下这两种索引类型有哪些差别和优劣。

B+树索引

B+树索引是一种多路径的平衡搜索树,具有如下特点:

  • 1.非叶子节点不保存数据,只保存索引值

  • 2.叶子节点保存所有的索引值和数据

  • 3.同级节点通过指针自小而大顺序链接

  • 4.节点内的数据也是自小而大顺序存放

  • 5.叶子节点拥有父节点的所有信息

结构如下图:

优点

  • 由于数据顺序存放,所以无论是区间还是顺序扫描都更快。

  • 非叶子节点不存储数据,因此几乎都能放在内存中,搜索效率更高

  • 单节点中可存储的数据更多,平均扫描I/O请求树更少

  • 平均查询效率稳定(每次查询都从根结点到叶子结点,查询路径长度相同)

缺点

  • 新增数据不是按顺序递增时,索引树需要重新排列,容易造成碎片和页分裂情况。

哈希索引

哈希索引采用一定的哈希算法,把键值换算成新的哈希值,检索时不需要类似B+树那样从根节点到叶子节点逐级查找,只需一次哈希算法即可立刻定位到相应的位置,速度非常快,具有如下特点:

  • 1.哈希索引建立在哈希表的基础上

  • 2.对于每个值,需要先计算出对应的哈希码(Hash Code),不同值的哈希码唯一

  • 3.把哈希码保存在哈希表中,同时哈希表也保存指向对应每行记录的指针

结构如下图:

优点

  • 大量唯一等值查询时,哈希索引效率通常更高。

缺点

  • 哈希索引对于范围查询和模糊匹配查询显得无能为力。

  • 哈希索引不支持排序操作,对于多列联合索引的最左匹配规则也不支持。

  • 哈希索引不支持前缀索引,因为哈希索引始终是使用索引列的全部内容来计算哈希值。

  • 如果存在哈希冲突的情况,也就是不同的索引列有着相同的哈希值,这时候需要遍历链表中所有的行指针进行逐行比对,直到找到所有满足条件的行,效率较低。

补充:二者区别

备注:先说下,在MySQL文档里,实际上是把B+树索引写成了BTREE,例如像下面这样的写法:

CREATE TABLE t(
aid int unsigned not null auto_increment,
userid int unsigned not null default 0,
username varchar(20) not null default ‘',
detail varchar(255) not null default ‘',
primary key(aid),
unique key(uid) USING BTREE,
key (username(12)) USING BTREE — 此处 uname 列只创建了最左12个字符长度的部分索引
)engine=InnoDB;

B+树是一个平衡的多叉树,从根节点到每个叶子节点的高度差值不超过1,而且同层级的节点间有指针相互链接。

在B+树上的常规检索,从根节点到叶子节点的搜索效率基本相当,不会出现大幅波动,而且基于索引的顺序扫描时,也可以利用双向指针快速左右移动,效率非常高。

因此,B+树索引被广泛应用于数据库、文件系统等场景。顺便说一下,xfs文件系统比ext3/ext4效率高很多的原因之一就是,它的文件及目录索引结构全部采用B+树索引,而ext3/ext4的文件目录结构则采用Linked list, hashed B-tree、Extents/Bitmap等索引数据结构,因此在高I/O压力下,其ioPS能力不如xfs。

简单地说,哈希索引就是采用一定的哈希算法,把键值换算成新的哈希值,检索时不需要类似B+树那样从根节点到叶子节点逐级查找,只需一次哈希算法即可立刻定位到相应的位置,速度非常快。

从上面的图来看,B+树索引和哈希索引的明显区别是:

  • 如果是等值查询,那么哈希索引明显有绝对优势,因为只需要经过一次算法即可找到相应的键值;当然了,这个前提是,键值都是唯一的。如果键值不是唯一的,就需要先找到该键所在位置,然后再根据链表往后扫描,直到找到相应的数据;

  • 从示意图中也能看到,如果是范围查询检索,这时候哈希索引就毫无用武之地了,因为原先是有序的键值,经过哈希算法后,有可能变成不连续的了,就没办法再利用索引完成范围查询检索;

  • 同理,哈希索引也没办法利用索引完成排序,以及like ‘xxx%’ 这样的部分模糊查询(这种部分模糊查询,其实本质上也是范围查询);

  • 哈希索引也不支持多列联合索引的最左匹配规则

  • B+树索引的关键字检索效率比较平均,不像B树那样波动幅度大,在有大量重复键值情况下,哈希索引的效率也是极低的,因为存在所谓的哈希碰撞问题

总结 

到此这篇关于mysql B+树索引与哈希索引的文章就介绍到这了,更多相关Mysql B+树索引与哈希索引内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: 关于MySQL B+树索引与哈希索引详解

本文链接: https://lsjlt.com/news/144371.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 关于MySQL B+树索引与哈希索引详解
    目录索引介绍B+树索引优点缺点哈希索引优点缺点补充:二者区别总结 索引介绍 索引是一种特殊的数据库结构,被设计用来快速查询数据库表中的特定记录。索引有多种类型,就像字典有拼...
    99+
    2024-04-02
  • mysql中B树和哈希索引有什么区别
    小编给大家分享一下mysql中B树和哈希索引有什么区别,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!  前言...
    99+
    2024-04-02
  • MySQL索引:B+树索引
    MySQL索引:B+树索引 B+树索引是传统意义上的索引,这是目前关系型数据库系统中查找最为常用和最为有效的索引。B+树索引的构造类似于二叉树,根据键值快速找到数据 B树 B+树是由B树演化而来的,在了解B+树之前,我们需要对B树有一点认...
    99+
    2021-09-01
    MySQL索引:B+树索引
  • MySQL中B树索引和B+树索引的区别详解
    目录1. 多路搜索树2. B树-多路平衡搜索树3. B树索引4. B+树索引总结如果用树作为索引的数据结构,每查找一次数据就会从磁盘中读取树的一个节点,也就是一页,而二叉树的每个节点...
    99+
    2024-04-02
  • 5. 索引与算法—B+树的操作、辅助索引与聚集索引、Cardinality、联合索引、覆盖索引、MRR/ICP、哈希算法、全文索引
    5.3 B+ 树 B+ 树是为磁盘或其他直接存储辅助设备设计的一种平衡查找树。在B+树中,所有记录都是按照键值大小顺序存放在同一层的叶子节点上,由叶子节点指针进行连接,双向链表连接。 5.3.1 B+ 树的插入操作 考虑一下三种情...
    99+
    2015-09-03
    5. 索引与算法—B+树的操作 辅助索引与聚集索引 Cardinality 联合索引 覆盖索引 MRR/ICP 哈希算法 全文索引
  • 【mysql】聚簇索引和非聚簇索引(B树和B+树)
    博主简介:想进大厂的打工人博主主页:@xyk:所属专栏: mysql 目录 一、索引分类 二、索引的数据结构 2.1 B树:改造二叉树 2.2 B+树:改造B树 三、Mysql索引实现—InnoDB引擎 3.1 主键索引(聚簇...
    99+
    2023-09-25
    mysql 数据库 b树 数据结构
  • MySQL中B树索引和B+树索引的区别是什么
    本文小编为大家详细介绍“MySQL中B树索引和B+树索引的区别是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“MySQL中B树索引和B+树索引的区别是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。如果用...
    99+
    2023-06-29
  • 浅谈MySQL的B树索引与索引优化小结
    MySQL的MyISAM、InnoDB引擎默认均使用B+树索引(查询时都显示为“BTREE”),本文讨论两个问题: 为什么MySQL等主流数据库选择B+树的索引结构? 如何基于索引结构,理解常见的...
    99+
    2024-04-02
  • MySQL 树形索引结构 B树 B+树 - G
    MySQL 树形索引结构 B树 B+树   如何评估适合索引的数据结构 索引的本质是一种数据结构 内存只是临时存储,容量有限且容易丢失数据。因此我们需要将数据放在硬盘上。 在硬盘上进行查询时也就产生了硬盘的I/O操作,而硬盘的I...
    99+
    2021-08-06
    MySQL 树形索引结构 B树 B+树 - G
  • MySQL的B+树索引和hash索引的区别
    简述一下索引: 索引是数据库表中一列或多列的值进行排序的一种数据结构;索引分为聚集索引和非聚集索引,聚集索引查询类似书的目录,快速定位查找的数据,非聚集索引查询一般需要再次回表查询一次,如果不使用索引就会进行全表扫描;还有可以进行多字段...
    99+
    2016-10-05
    MySQL的B+树索引和hash索引的区别
  • 与B树索引相关的执行计划
    索引唯一扫描,索引范围扫描,索引全扫描,索引快速全扫描和索引跳跃式扫描。索引唯一扫描:SQL> create table employee(gender var...
    99+
    2024-04-02
  • MySQL中InnoDB索引数据结构(B+树)详解
    mysql的innodb的索引的B+树逐步讲解 B树B+树B树和B+树的不同点聚集索引 VS 非聚集索引总结(面试题)1.为什么不使用二叉查找树?2.为什么不使用平衡二叉树?3.为什么不使用B树?4.为什么MySQL选择B+树做索引...
    99+
    2023-08-17
    b树 数据结构 mysql 数据库
  • 如何在mysql中使用哈希索引
    这期内容当中小编将会给大家带来有关如何在mysql中使用哈希索引,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、Hash索引应进行二次搜索。使用哈希索引两次搜索,第一次找到相应的行,第二次读取数据,但频...
    99+
    2023-06-15
  • 如何在mysql中创建哈希索引
    本篇文章为大家展示了如何在mysql中创建哈希索引,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、说明如果存储引擎不支持hash索引,并且想提高hash索引带来的性能,则可以模拟InnoDB制作哈...
    99+
    2023-06-15
  • 为什么MySQL用B+树做索引
    索引这个词,相信大多数人已经相当熟悉了,很多人都知道MySQL的索引主要以B+树为主,但是要问到为什么用B+树,恐怕很少有人能把前因后果讲述的很完整。本文就来从头到尾介绍下数据库的索引。 索引是一种数据结构,用于帮助我们在大量数据中快速定...
    99+
    2017-02-01
    为什么MySQL用B+树做索引
  • mysql中哈希索引的作用是什么
    今天就跟大家聊聊有关mysql中哈希索引的作用是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、概念哈希索引是基于哈希表的实现,只有精确匹配索引所有列的查询才有效。不能使用范围...
    99+
    2023-06-15
  • MySQL用B+树(而不是B树)做索引的原因
      https://www.jianshu.com/p/7ce804f97967 众所周知,MySQL的索引使用了B+树的数据结构。那么为什么不用B树呢? 先看一下B树和B+树的区别。 1.B树 维基百科对B树的定义为“在计算...
    99+
    2020-03-03
    MySQL用B+树(而不是B树)做索引的原因
  • 图解MySQL索引--B-Tree(B+Tree)
    【推荐】2020年最新Java电子书集合.pdf(吐血整理) >>> 看了很多关于索引的博客,讲的大同小异。但是始终没有让我明白关于索引的一些概念,如B-Tree索引,Hash索引,唯一索引....或许有很多人和我一样,没搞清楚概念就...
    99+
    2017-05-16
    图解MySQL索引--B-Tree(B+Tree)
  • MySQL中的B-Tree引索与Hash引索有区别吗
    MySQL中的B-Tree引索与Hash引索有区别吗?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。MySQL中B-Tree引索...
    99+
    2024-04-02
  • 详解MySQL 聚簇索引与非聚簇索引
    1、聚集索引 表数据按照索引的顺序来存储的,也就是说索引项的顺序与表中记录的物理顺序一致。对于聚集索引,叶子结点即存储了真实的数据行,不再有另外单独的数据页。 在一张表上最多只能创建一个聚集索引,因为真实数据的物理顺...
    99+
    2022-05-14
    MySQL 聚簇索引 MySQL 非聚簇索引 MySQL 索引
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作