Mysql索引类型Btree和Hash的区别以及使用场景

2023-05-16

遇到单表数据量大的时候很多开发者都会想到给相对的字段建立索引来提高性能(mysql索引的使用),但很少会去关注索引的类型该如何选择,在mysql中支持有两种类型,最常用的也是默认的Btree类型,其次就是最容易被忽略的Hash类型。下面将分别介绍两种索引类型的区别。

 

Btree类型的索引,Btree又称b+树

Mysql索引类型Btree和Hash的区别以及使用场景

(1)所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好是有序的;(只有根节点存储关键字最后树的末梢才有值)

(2)非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储(关键字)数据的数据层。(非根节点,存储的其实是指向根节点的索引

(3) 不可能在非叶子结点存数据。

(4)根节点横向也有链指针(方便快速顺藤摸瓜嘛,没这个指针,就算下一个取的值是挨着的邻居,也得跑个圈才能拿到)

通过上述分析,所以能直观的理解出Btree类型在我们查询数据时适合用于范围查找,在某一叶子的节点到另一节点的范围。例如<,>,orderby等场景都可使用。

 

Hash索引,其检索效率非常高的一种精确定位索引

Hash索引不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-Tree 索引,它会将计算出的Hash值和对对应的行指针信息记录在Hash表中。但是虽然Hash效率很高但是同样也有很多的弊端存在和限制存在。

(1)Hash 索引仅仅能满足"=","IN"和"<=>"查询,不能使用范围查询。

(2)Hash 索引无法被用来避免数据的排序操作。

(3)Hash 索引不能利用部分索引键(组合索引)查询。

(4)Hash 索引在任何时候都不能避免表扫描。

(5)Hash 索引遇到大量Hash值相等的情况后性能并不一定就会比B-Tree索引高。

因为Hash 索引比较的是进行 Hash 运算之后的 Hash 值,所以它只能用于等值的过滤,不能用于基于范围的过滤。经过相应的 Hash 算法处理之后的 Hash 值的大小关系,并不能保证和Hash运算前完全一样,数据库自然也无法利用索引的数据来避免任何排序运算。

Hash 索引在计算 Hash 值的时候是组合索引键合并后再一起计算 Hash 值,而不是单独计算 Hash 值,所以通过组合索引的前面一个或几个索引键进行查询的时候,Hash 索引也无法被利用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mysql索引类型Btree和Hash的区别以及使用场景 的相关文章

  • 防止全局变量重复定义

    问题 xff1a 在 h文件中定义了全局变量 并用 ifndef identifier h define identifier h endif 但是依然出现重复定义问题 分析 xff1a ifndef这套条件编译是为了防止同一个 c文件中包
  • Checksum 校验和

    一 校验数据的一般算法比较 都是通过对数据进行校验产生一个校验值 xff0c 用来校验数据完整性 不同点 xff1a 算法不同 CRC采用多项式除法 xff0c MD5和SHA1使用的是替换 轮转等方法 xff1b 校验值的长度不同 CRC
  • GPIO小综合-按键实验

    之前用寄存器操作实现了跑马灯和蜂鸣器 这次接着输入寄存器IDR捕获按键 并且综合亮灯和发出声音 xff0c 作为寄存器GPIO小综合练习 首先查KEY的电路图 xff0c 分别用到了ACD几个时钟 KEY0对应PC8 xff0c KEY1对
  • 数据结构入门

    概念 数据 Data xff1a 是客观事物的符号表示 在计算机科学中指的是所有能输入到计算机中并被计算机程序处理的符号的总称 数据元素 Data Element xff1a 是数据的基本单位 xff0c 在程序中通常作为一个整体来进行考虑
  • Linux系统发布项目完整教程

    目录 1 后端代码打包 1 1后端代码中文件上传路径修改 1 2 后端代码打包 1 3 后端项目发布 2 前端静态资源打包 2 1 项目中关于路径修改的说明 2 2模拟域名访问的设置 修改HOSTS文件 2 3 前端请求路径修改 2 4 前
  • 畸变校正与极线校正(具体原理+Matlab代码)

    附 xff1a 相关需要的工具函数源代码 xff08 投影函数 校正矩阵计算等 xff09 见最下面 1 畸变校正 1 1 形成原因 图像畸变一般有两种 xff0c 第一种是透镜本身的形状有问题 xff0c 使得图像发生径向畸变 xff1b
  • c++的http请求

    include lt iostream gt include lt fstream gt include lt cstdlib gt include lt cstring gt include lt sys socket h gt incl
  • stl智能指针和boost智能指针对比

    先说说stl中的智能指针auto ptr xff0c 先说说auto ptr的特点 std auto ptr用来管理单个堆内存对象 xff0c 但是独享所有权 xff0c 且不允许赋值和拷贝 xff08 没有重载operator 61 xf
  • boost库noncopyable简介

    前言 看了一段时间的UNP对Linux下网络编程有了一定程度的理解 xff0c 经学长推荐 xff0c 开始学习陈硕老师的 Linux多线程服务端编程 看之前特地上了知乎 xff0c 阅读者需要具备一定的C 43 43 和网络编程基础 xf
  • 车道线检测和基于RGB交通标志检测系统

    好久好久好久没更新博客了 今天是冬至 首先跟大家说一声 冬至快乐 冬至吃过汤圆 又长了一岁 感觉真的时不待人 好像自己什么事情也没有完成 也没留下一些什么东西 所以今天就想来写写博客 我是分割线 运行环境 Win7系统64位 运行平台 Qt
  • c++中h文件和lib有什么区别

    转自 xff1a https zhidao baidu com question 510969923 html 1 lib 是若干个obj的集合 xff0c 本质与obj相同 xff01 lib有静态lib和动态lib之分 静态lib将导出
  • cmake在Windows上的使用

    cmake介绍 cmake是一个构建C 43 43 代码的跨平台工具 xff0c 他能够干什么呢 xff1f 他能够搜索你的平台环境 xff0c 然后生成平台上用于Build的文件 在Windows上安装了Visual Studio 他能够
  • ubuntu系统安装完nvidia显卡驱动后黑屏,不能进入系统

    昨天想看显卡 xff0c 更新了下驱动 xff0c 发现服务器重启进不去 步骤 1 开机按esc 进入 选项界面2 进去以后选择一个括号里面带recovery mode的选项3 然后它自动黑屏出现代码 xff0c 然后弹出一个选择框 xff
  • ubuntu18.04下cmake的安装

    一 使用安装命令 span class token function sudo span span class token function apt span span class token function install span c
  • Nginx/Lighttpd/Apache三大web服务器对比分析

    一 xff0e 软件介绍 apache lighttpd nginx 1 lighttpd Lighttpd是一个具有非常低的内存开销 xff0c cpu占用率低 xff0c 效能好 xff0c 以及丰富的模块等特点 lighttpd是众多
  • STM32学习笔记八——串口实现不定长数据传输

    生命不息 xff0c 奋斗不止 0 摘要 今天说一下STM32单片机的接收不定长度字节数据的方法 由于STM32单片机带IDLE中断 xff0c 所以利用这个中断 xff0c 可以接收不定长字节的数据 xff0c 由于STM32属于ARM单
  • linux shell 字符串长度

    本篇内容主要包括以下内容 xff1a 获取字符串长度的方法 各方法间性能比较 相关内容补充 说明 xff1a 本篇内容为学习shell 编程 老男孩教程 笔记 xff0c 部分内容为相关视频课程内容 xff0c 补充部分是我查资料所得 xf
  • measurement studio测控与单片机通信上位机

    using NationalInstruments Analysis using NationalInstruments Analysis Conversion using NationalInstruments Analysis Dsp
  • C语言实现Socket简单通信

    环境是linux xff0c 不过应该没什么影响 xff0c 因为只用到了socket的基本用法 xff0c 没有涉及pthread等 分为服务器端和客户端 xff0c 服务器端监听端口发来的请求 xff0c 收到后向客户端发送一个Hell
  • 接口工具POSTMAN怎么设置中文

    相信各位测试工程师或者测试小白们都会在进行接口测试的时候接触到POSTMAN这款强大的接口测试软件 Postman 从最初设计上就是为接口测试而生的 xff0c 所以在程序员中广泛使用 xff0c 在开发调试网络程序时跟踪一些网络请求 xf

随机推荐