mysql hash 索引 vs B-TREE 索引 理解

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: hash 索引 当前 memory 引擎, innodb 引擎支持 hash 索引, 索引将存放内存中,(innodb 存放 buffer pool)  innodb 启动 innodb-adaptive-hash-index 参数就能够支持   假设利用  show engine innodb status \G 看到大量类似下图的等待值 (参见 RW-latch 由 brt0

hash 索引


当前 memory 引擎, innodb 引擎支持 hash 索引, 索引将存放内存中,(innodb 存放 buffer pool)
 
innodb 启动 innodb-adaptive-hash-index 参数就能够支持

  假设利用  show engine innodb status \G 看到大量类似下图的等待值 (参见 RW-latch 由 brt0sea.c 产生)

  建议你使用 skip-innodb_adaptive_hash_index 关闭 innodb hash 索引功能. 


索引由 HASH 算法获得, 因此不一定是唯一 HASH 值,需要对索引进行全扫描

 

如上图描述,数据存放后, HASH 索引表中, 具有数据及 HASH 键专用存放的区间, 而每个 HASH 都与某个数据一一对应(注,再强调一次不一定唯一哟)

 

B-TREE 索引


常用 Innodb 与 MyISAM 引擎都支持
在 Innodb里,有两种形态,
一是primary key形态,其leaf node里存放的是数据,而且不仅存放了索引键的数据,还存放了其他字段的数据。
二是secondary index,其leaf node和普通的 B-TREE 差不多,只是还存放了指向主键的信息.

而在MyISAM里,
主键和其他的并没有太大区别。
不过和Innodb不太一样的地方是在MyISAM里,leaf node里存放的不是主键的信息,而是指向数据文件里的对应数据行的信息.

如图描述,如需要获得数据 G6 的信息,那么I/O 顺序为 INDEX PAGE1 -> INDEX PAGE2 -> G -> G6

按照上述顺序,只能够获得 G6 对应的索引信息【如块信息】而已,真正的数据并非存在该表中,利用之前获得的【块信息】可以直接从某个数据块中获得对应的数据信息, 而不需要进行全表扫描在多个数据块中搜索数据

 

速度比较

hash 索引定位快速一步定位数据
B-TREE 索引要从根页子叶才能够找到具体数据,可能存在对 I/O 才能够获得信息

 

用于条件判断比较


hash 索引只能够使用 = <> IN 等判断方法进行搜索, 对 order by 没有任何加速功能
B-TREE 索引可用于 =, >, >=, <, <=, BETWEE, 同样可以用于 like 操作

select * from t1 where name like 'Parti%'; (支持)
select * from t1 where name like 'Par%ti%'; (支持)
select * from t1 where name like '%Parti'; (不支持)

 

MySQL 5.6 新参数 --innodb-adaptive-hash-index 能够令 innodb 也具备 hash index 的特性

默认情况下  5.6 启用该功能,但不一定能够获得好处,因此 HASH 索引将会在 INNODB BUFFER 中占用一定的内存空间。

建议自行 BenchMark 一下启用及关闭时的性能再行决定。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
16天前
|
关系型数据库 MySQL 索引
mysql 分析5语句的优化--索引添加删除
mysql 分析5语句的优化--索引添加删除
12 0
|
21天前
|
存储 关系型数据库 MySQL
轻松入门MySQL:优化进销存管理,掌握MySQL索引,提升系统效率(11)
轻松入门MySQL:优化进销存管理,掌握MySQL索引,提升系统效率(11)
|
16天前
|
SQL 缓存 关系型数据库
mysql性能优化-慢查询分析、优化索引和配置
mysql性能优化-慢查询分析、优化索引和配置
82 1
|
12天前
|
存储 关系型数据库 MySQL
【MySQL实战笔记】 04 | 深入浅出索引(上)-02
【4月更文挑战第9天】InnoDB数据库使用B+树作为索引模型,其中主键索引的叶子节点存储完整行数据,非主键索引则存储主键值。主键查询只需搜索一棵树,而非主键查询需两次搜索,因此推荐使用主键查询以提高效率。在插入新值时,B+树需要维护有序性,可能导致数据页分裂影响性能。自增主键在插入时可避免数据挪动和页分裂,且占用存储空间小,通常更为理想。然而,如果场景仅需唯一索引,可直接设为主键以减少查询步骤。
15 1
【MySQL实战笔记】 04 | 深入浅出索引(上)-02
|
14天前
|
关系型数据库 MySQL 数据库
6. 了解过Mysql的索引嘛 ?
了解MySQL的索引类型,包括单列索引(普通、唯一、主键和全文索引)和组合索引。单列索引用于一列,如普通索引允许重复值,唯一索引和主键索引不允许,后者不允许空值。全文索引适用于特定文本字段。组合索引是多列的,遵循左前缀原则,通常推荐用于提高查询效率,除非是主键。
16 0
|
17天前
|
关系型数据库 MySQL 数据库
mysql卸载、下载、安装(window版本)
mysql卸载、下载、安装(window版本)
|
1月前
|
关系型数据库 MySQL 数据库
rds安装数据库客户端工具
安装阿里云RDS的数据库客户端涉及在本地安装对应类型(如MySQL、PostgreSQL)的客户端工具。对于MySQL,可选择MySQL Command-Line Client或图形化工具如Navicat,安装后输入RDS实例的连接参数进行连接。对于PostgreSQL,可以使用`psql`命令行工具或图形化客户端如PgAdmin。首先从阿里云控制台获取连接信息,然后按照官方文档安装客户端,最后配置客户端连接以确保遵循安全指引。
86 1
|
6天前
|
关系型数据库 MySQL 数据库
《MySQL 简易速速上手小册》第1章:MySQL 基础和安装(2024 最新版)
《MySQL 简易速速上手小册》第1章:MySQL 基础和安装(2024 最新版)
28 4
|
29天前
|
Ubuntu 关系型数据库 MySQL
Ubuntu 中apt 安装MySQL数据库
Ubuntu 中apt 安装MySQL数据库
69 0
|
2天前
|
关系型数据库 MySQL Windows
windows安装MySQL5.7教程
windows安装MySQL5.7教程
8 0