-B+树索引和HASH索引有哪些不一样【MySQL系列】「建议收藏」

-B+树索引和HASH索引有哪些不一样【MySQL系列】「建议收藏」我们都理解B+树和Hash索引的区别有助于我们预测索引在不同的存储引擎中是怎么执行查询的。

-B+树索引和HASH索引有哪些不一样【MySQL系列】

我们都理解B+树和Hash索引的区别有助于我们预测索引在不同的存储引擎中是怎么执行查询的。

B+ TREE 索引特性
B数是一种在数据库索引中流行的树数据结构。该结构始终保持排序,从而可以快速查找精确匹配。MySQL中使用的是B树的一种变体,B+树,这种类型的索引可用于大多数存储引擎,例如InnoDB和 MyISAM。B+树中的B不是代表二叉(binary),而是代表平衡(balance),因为 B+树是从最早的平衡二叉树演化而来,但是B+树不是一个二叉树。

B+树可以用在=、 >、 >=、 <、 <= 、BETWEEN 等比较运算符中进行比较。也可以用在不是以通配符%开头的LIKE语句中进行比较,因为LIKE语句如果以通配符开头,索引可能会失效。
比如下面的SQL语句就没有使用索引即使key_col建立了索引。

SELECT * FROM tbl_name WHERE key_col LIKE “%Patrick%”;
1.
如果使用LIKE ‘%string_like%’ 进行查询时string_like字符串超过三个字符,MySQL将使用Turbo Boyer-Moore算法对string_like字符串进行初始化以达到快速查询的目的。

Boyer-Moore算法在用于查找子字符串的算法当中,BM(Boyer-Moore)算法被认为最高效的字符串搜索算法,它由Bob Boyer和J Strother Moore设计于1977年。一般情况下,比KMP算法快3-5倍。该算法常用于文本编辑器中的搜索匹配功能,比如大家所熟知的GNU grep命令使用的就是该算法,这也是GNU grep比BSD grep快的一个重要原因。 — 百度百科

有时候即使查询能命中索引,MySQL也不会使用索引。当MySQL优化器发现通过索引需要扫描的行占比很大,在这种情况下,表扫描可能会快得多,因为它需要查找的行更少。

Hash 索引特性
Hash 索引是通过hash算法进行索引的建立和查询的,hash算法是把任意长度的输入通过hash算法变换成固定长度的输出,该输出就是hashcode,hash算法本质上来说是压缩算法。当数据量大很可能进行大量hash冲突,影响性能。所以hash所以更适合精确查询。

两者区别
B+树索引支持精确查询、比较查询、范围查询、模糊查询、排序等多种查询方式。如下:

  • 进口气动球阀

而Hash 索引更适合精确查询,也不能进行 ORDER BY排序操作,比较查询、范围查询、模糊查询更不好处理了。

总结
B+树索引支持的查询方式更多,更适合作为数据库索引的数据结构。但是如果系统需要Hash 索引这种key-value查询的方式也可以选择Hash 索引。

原文地址:https://www.cnblogs.com/php-Java/archive/2022/08/01/16538928.html

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

(0)
上一篇 2023-05-29
下一篇 2023-05-29

相关推荐

  • GaussDB架构(下)「建议收藏」

    GaussDB架构(下)「建议收藏」GaussDB云数据库架构 云数据库系统的主要目的是提供数据库系统服务的基础设施,以实现对计算机资源的共享。本文所讲述的GaussDB云数据库架构设计的内容,目前处于研发阶段,对应产品尚未向客户发布…

    2023-04-13
    157
  • 技术分享 | 使用 RAND() 函数过程中发现的诡异 Bug 分析[亲测有效]

    技术分享 | 使用 RAND() 函数过程中发现的诡异 Bug 分析[亲测有效]作者:Agate Li 爱可生研发团队成员,负责数据库管理平台相关项目,.Net 技术爱好者,长期潜水于技术圈。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小…

    2023-02-04
    145
  • mysql设计表注意事项_数据库设计需要考虑的问题

    mysql设计表注意事项_数据库设计需要考虑的问题下面探讨的数据库为MySQL 存储引擎为innodb因为这是最常见的,使用最多的数据库和引擎 什么是页分裂? 这是因为聚簇索引采用的是平衡二叉树算法,而且每个节点都保存了该主键所对应行的数据,假设插…

    2023-03-08
    140
  • 【漫画】ES原理 必知必会的倒排索引和分词「建议收藏」

    【漫画】ES原理 必知必会的倒排索引和分词「建议收藏」倒排索引的初衷 倒排索引,它也是索引。索引,初衷都是为了快速检索到你要的数据。 我相信你一定知道mysql的索引,如果对某一个字段加了索引,一般来说查询该字段速度是可以有显著的提升。 每种数据库都有自

    2023-03-04
    158
  • 使用Python Tkinter Canvas创建交互性绘图应用

    使用Python Tkinter Canvas创建交互性绘图应用Tkinter是Python中用于创建图形用户界面(GUI)的标准模块。Tkinter Canvas是Tkinter中的一个功能强大的组件,它允许用户在窗口中绘制复杂图形,例如直线、圆、矩形、多边形和文本等。Tkinter Canvas还具有交互性,可以捕捉用户的鼠标事件并执行相应的操作,例如拖动和修改绘制的对象。Tkinter Canvas非常适合用于创建交互性的绘图应用程序。

    2024-02-27
    98
  • MongoDB 文档游标[通俗易懂]

    MongoDB 文档游标[通俗易懂]查询结果遍历 当我们把查询结果赋值给一个JS变量的时候,查询结果其实是一个游标 可以通过下标来访问查询结果 item 可以迭代、遍历 打印出所有item1 > var cursor=db.accou…

    2023-02-15
    153
  • python推荐系统案例(python推荐软件)

    python推荐系统案例(python推荐软件)Linux下图形一般都有qt和gtk两种形式,做界面设计都还不错。如果想用gtk的话可以安装Anjuta IDE支持C/C++、Python、Java多语言;如果想用qt的话可以用qt界面设计大师:)

    2023-12-02
    122
  • 安装hadoop前的准备工作_hadooplinux搭建

    安装hadoop前的准备工作_hadooplinux搭建这个hadoop的搭建是以比赛前的练习为目的的,所以我直接以root用户来搭建hadoop,主要也是方便我自己以后复习用的 需要的软件:vmware15.5,xshell6,xftp6,jdk Lin

    2022-12-21
    141

发表回复

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