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

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

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

B+树可以用在=、 >、 >=、

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 索引。

Original: https://www.cnblogs.com/php-Java/p/16538928.html
Author: PHPjpsck
Title: -B+树索引和HASH索引有哪些不一样【MySQL系列】

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/505113/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • java 论坛模块设计方案

    权限管理:点开二级菜单进入三级菜单显示 角色(基础权限)和按钮权限 角色(基础权限): 分角色组和角色,独立分配菜单权限和增删改查权限。(一个用户可以多个角色) 按钮权限: 给角色…

    数据库 2023年6月6日
    0108
  • 07-MyBatis中的动态标签

    MyBatis中的动态标签 1、if标签 if标签是为了判断传入的值是否符合某种条件,比如是否不为空 2、where标签 where标签可以用来做动态拼接查询条件,当和 if标签配…

    数据库 2023年6月16日
    0111
  • String类常用的API

    String类常用API总结及注意事项 String类常用的API 字符串内容的比较: 注意: 不能使用 == 去比较两个字符串的内容。原理:比较的是字符串的地址。(如果两个字符串…

    数据库 2023年6月16日
    0126
  • MySQL锁(乐观锁、悲观锁、多粒度锁)

    锁 并发事务可能会发生什么情况: [En] What may happen to concurrent transactions: 读-读事务并发:此时是没有问题的,读操作不会对记…

    数据库 2023年5月24日
    0119
  • ATM系统开发(Java版)

    ATM系统Java模拟开发总结 ATM系统开发 技术点分析 1.面向对象编程 每个用户的账户都是一个对象,所以需要设计账户类Accent用于创建账户对象封装账户信息。 2.使用集合…

    数据库 2023年6月16日
    0106
  • IDEA 快捷键

    普通快捷键 分类 说明 快捷键 代码提示 代码提示或自动补全 Alt + / 代码提示 Ctrl + Alt + Space 提示方法参数类型 Ctrl + P 提示注释文档 Ct…

    数据库 2023年6月6日
    094
  • Jenkins2.350配置gitee

    一、下载JenKins 以War包举例演示 JenKins下载地址JenKins中文文档 二、启动Jenkins 需要配置好jdk,不做多阐述。 java -jar jenkins…

    数据库 2023年6月6日
    0119
  • CSS进阶内容——布局技巧和细节修饰

    CSS进阶内容——布局技巧和细节修饰 我们在之前的文章中已经掌握了CSS的大部分内容,但仍有一些内容我们没有涉略,这篇文章就是为了补充前面没有涉及的内容,为我们的知识做出补充并且介…

    数据库 2023年6月14日
    0124
  • 【黄啊码】MySQL入门—4、掌握这些数据筛选技能比你学python还有用-1

    大家好!我是黄啊码,今天没继续select * 了吧,如果还继续,那接下来的课程先别学,回去好好把之前的课程重复复习一遍,学明白了我们再会?废话不多说,学今天的课程之前我们先来说说…

    数据库 2023年5月24日
    0119
  • asyncio 异步编程

    首先了解一下协程,协程的本质就是一条线程,多个任务在一条线程上来回切换,协程的所有切换都是基于用户,只有在用户级别才能感知到的 IO 才会用协程模块来规避,在 python 中主要…

    数据库 2023年6月9日
    090
  • python爬取博客圆首页文章链接+标题

    新人一枚,初来乍到,请多关照 来到博客园,不知道写点啥,那就去瞄一瞄大家都在干什么好了。 使用python 爬取博客园首页文章链接和标题。 首先当然是环境了,爬虫在window10…

    数据库 2023年6月11日
    0157
  • Linux(CentOS)安装MinIo,详细教程,附防火墙端口开放操作

    Linux安装MinIo(已配置开机重启) 1,准备安装目录和文件 系统:CentOs #进入安装目录 cd /home/minio #在线下载二进制文件 wget https:/…

    数据库 2023年6月11日
    0118
  • 容器化 | 构建 RadonDB MySQL 集群监控平台

    上一篇文章我们演示了如何《在 S3 备份恢复 RadonDB MySQL 集群数据》,本文将演示在 KubeSphere[1] 中使用 Prometheus[2] + Grafan…

    数据库 2023年5月24日
    0114
  • 6 short s1 = 1; s1 = s1 + 1;有错吗? short s1 = 1; s1 += 1; 有错吗?

    第一个有错,因为s1是short类型,s1 + 1会自动转换为int类型,将int类型赋值给short类型的s1,属于高位类型转低位,需强制转换。 第二个正确,因为s1 += 1 …

    数据库 2023年6月6日
    093
  • JVM-类加载

    JVM JAVA技术交流群:737698533 类加载 推荐视频 https://www.bilibili.com/video/BV1PJ411n7xZ JVM系列笔记结合此视频和…

    数据库 2023年6月16日
    0117
  • MySQL8.0 新特性 Hash Join

    概述&背景 MySQL一直被人诟病没有实现HashJoin,最新发布的8.0.18已经带上了这个功能,令人欣喜。有时候在想,MySQL为什么一直不支持HashJoin呢?我…

    数据库 2023年6月9日
    0122
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球