iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >mysql一两种索引方式hash和btree
  • 341
分享到

mysql一两种索引方式hash和btree

mysql数据库 2023-09-01 21:09:25 341人浏览 独家记忆
摘要

索引是帮助Mysql获取数据的数据结构。最常见的索引是Btree索引和Hash索引。 不同的引擎对于索引有不同的支持:Innodb和MyISAM默认的索引是Btree索引;而Mermory默认的索引是Hash索引。 1. Hash索引: H

索引是帮助Mysql获取数据的数据结构。最常见的索引是Btree索引和Hash索引。

不同的引擎对于索引有不同的支持:Innodb和MyISAM默认的索引是Btree索引;而Mermory默认的索引是Hash索引。

1. Hash索引:

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

2. B-Tree索引

BTree索引是最常用的mysql数据库索引算法,因为它不仅可以被用在=,>,>=,<,<=和between这些比较操作符上,而且还可以用于like操作符.

B-Tree 索引是 mysql 数据库中使用最为频繁的索引类型,除了 ArcHive 存储引擎之外的其他所有的存储引擎都支持 B-Tree 索引。不仅仅在 Mysql 中是如此,实际上在其他的很多数据库管理系统中B-Tree 索引也同样是作为最主要的索引类型,这主要是因为 B-Tree 索引的存储结构在数据库的数据检 索中有非常优异的表现。
一般来说, MySQL 中的 B-Tree 索引的物理文件大多都是以 Balance Tree 的结构来存储的,也就是所有实际需要的数据都存放于 Tree 的 Leaf node ,而且到任何一个 Leaf Node 的最短路径的长度都是完全相同的,所以我们大家都称之为 B-Tree 索引当然,可能各种数据库(或 MySQL 的各种存储引擎)在存放自己的 B-Tree 索引的时候会对存储结构稍作改造。如 Innodb 存储引擎的 B-Tree 索引实际使用的存储结构实际上是 B+Tree ,也就是在 B-Tree 数据结构的基础上做了很小的改造,在每一个
Leaf Node 上面出了存放索引键的相关信息之外,还存储了指向与该 Leaf Node 相邻的后一个 LeafNode 的指针信息,这主要是为了加快检索多个相邻 Leaf Node 的效率考虑。
在 Innodb 存储引擎中,存在两种不同形式的索引,一种是 Cluster 形式的主键索引( Primary Key ),另外一种则是和其他存储引擎(如 MyISAM 存储引擎)存放形式基本相同的普通 B-Tree 索引,这种索引在 Innodb 存储引擎中被称为 Secondary Index 。下面我们通过图示来针对这两种索引的存放形式做一个比较。

3、mysql索引与引擎的关系

来源地址:https://blog.csdn.net/weixin_70280523/article/details/129250077

您可能感兴趣的文档:

--结束END--

本文标题: mysql一两种索引方式hash和btree

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mysql一两种索引方式hash和btree
    索引是帮助mysql获取数据的数据结构。最常见的索引是Btree索引和Hash索引。 不同的引擎对于索引有不同的支持:Innodb和MyISAM默认的索引是Btree索引;而Mermory默认的索引是Hash索引。 1. Hash索引: H...
    99+
    2023-09-01
    mysql 数据库
  • Mysql创建json字段索引的两种方式
    目录一、前言二、通过虚拟列添加索引(Secondary Indexes and Generated Columns)三、多值索引(Using multi-valued Indexes)四、官网地址一、前言 jsON 数据...
    99+
    2023-06-09
    Mysql创建json字段索引 Mysql json创建索引
  • mysql添加多个btree索引的方法
    小编给大家分享一下mysql添加多个btree索引的方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!目前大部分数据库系统及文件系统都采用B-Tree或其变种B+Tree作为索引结构。1、B+...
    99+
    2024-04-02
  • Mysql为json字段创建索引的两种方式
    目录 一、前言二、通过虚拟列添加索引(Secondary Indexes and Generated Columns)三、多值索引(Using multi-valued Indexes)四、官...
    99+
    2023-09-24
    mysql json 数据库
  • mysql中B+Tree索引和Hash索引有什么区别
    这篇文章主要为大家展示了“mysql中B+Tree索引和Hash索引有什么区别”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql中B+Tree索引和Hash索引有什么区别”这篇文章吧。1、...
    99+
    2023-06-15
  • MySQL几种创建索引的方式
    一、创建表时创建索引 key 索引名 (column); 二、表创建好后创建索引 通过Alter创建索引 ①PRIMARY  KEY(主键索引)         mysql > ALTER  TABLE  `table_name`  A...
    99+
    2023-09-01
    mysql
  • mysql 创建索引的三种方式
    1、使用CREATE INDEX创建,语法如下: CREATE INDEX indexName ON tableName (columnName(length)); 2、使用ALTER语句创建,语法如下: ALTER TABLE ...
    99+
    2023-09-07
    mysql
  • MySql添加索引的几种方式
    添加索引 添加primary key(主键索引) alter table 表名 add primary key(列名); 添加unique(唯一索引) alter table 表名 add unique(列名); 添加普通索引index...
    99+
    2023-09-03
    mysql 数据库 sql
  • MySQL索引优化的方式有哪几种
    MySQL索引优化的方式有以下几种:1. 选择合适的索引类型:MySQL提供了多种索引类型,如B树索引、哈希索引、全文索引等。根据具...
    99+
    2024-02-29
    MySQL
  • Mysql 索引(三)—— 不同索引的创建方式(主键索引、普通索引、唯一键索引)
    了解了主键索引的底层原理,主键索引其实就是根据主键字段建立相关的数据结构(B+树),此后在使用主键字段作为条件查询时,会直接根据主键查找B+树的叶子结点。除了主键索引外,普通索引和唯一键索引也是如此,只不过普通索引要稍微绕一点,下面会具体介...
    99+
    2023-09-12
    mysql 数据库 java
  • 【创建索引的三种方式】
    创建索引的三种方式 第一种方式:在执行 CREATE 第二种方式:使用 ALTER TABLE 命令去增加索 ALTER TABLE table_name ADD INDEX index_name ...
    99+
    2023-09-02
    数据库 mysql sql
  • mysql的索引类型和索引方法
    mysql 索引类型包括普通索引、唯一索引、全文索引、空间索引和哈希索引。索引方法有 btree、hash 和 rtree。选择合适的索引类型和方法取决于数据类型和查询模式,例如范围查找...
    99+
    2024-04-22
    mysql
  • python列表索引的两种方法是什么
    本文小编为大家详细介绍“python列表索引的两种方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“python列表索引的两种方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1、可以通过符号[]获...
    99+
    2023-06-30
  • MySQL 修改端口(两种方式)
    如果安装的mysql有my.ini文件,可以再文件中找到port修改 如果安装的mysql没有my.ini, 找到快捷访问    1) Reconfigure 可以修改设定好的参数  2)直接修改端口  来源地址:https://b...
    99+
    2023-09-12
    mysql 数据库 java
  • MySQL自动填充create_time和update_time的两种方式
    目录1、脚本方式2、工具方式总结1、脚本方式 createTime只需要把类型设定为timestamp,默认值为current_timestamp即可,updateTime比crea...
    99+
    2024-04-02
  • MySQL查询性能优化七种方式索引潜水
    目录前言: 有读者可能会一脸懵? 啥是索引潜水? 你给起的名字的吗?有没有索引蛙泳? 这个名字还真不是我起的,今天要讲的知识点就叫索引潜水(Index dive) 。 先要...
    99+
    2022-11-13
    MySQL查询性能优化 MySQL索引潜水
  • ajax的两种提交方式(get/post)和两种版本
    最近比较闲,就把以前用过的技术串一下做个手札,方便以后自己偷懒,小鸟你们幸福了。 首先主要是将javascript版本ajax做下注释:ajax异步刷新主要是将所需条件拼成字符串传入...
    99+
    2022-11-15
    ajax提交方式
  • win10 mysql导出csv的两种方式
    win10导出csv有两种方式,第一种是借助工具,Navicat for Mysql是一个非常好用的mysql可视化工具,可以导出多种格式的数据,但是也有其局限。第二种是原始SQL语句导出。 Navicat...
    99+
    2024-04-02
  • MySQL普通索引和唯一索引的深入讲解
    场景 1、维护一个市民系统,有一个字段为身份证号 2、业务代码能保证不会写入两个重复的身份证号(如果业务无法保证,可以依赖数据库的唯一索引来进行约束) 3、常用SQL查询语句:SELECT n...
    99+
    2024-04-02
  • MySQL中的聚簇索引、非聚簇索引、联合索引和唯一索引是什么
    今天小编给大家分享一下MySQL中的聚簇索引、非聚簇索引、联合索引和唯一索引是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章...
    99+
    2023-04-21
    mysql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作