Mysql 二级索引回表知识点:顺序I/O & 随机I/O

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: Mysql 二级索引回表知识点:顺序I/O & 随机I/O

在这里插入图片描述

一、准备工作

1.1 创建一张数据表

CREATE TABLE `student` (
  `id` bigint(20) NOT NULL COMMENT 'ID',
  `name` varchar(64) DEFAULT NULL COMMENT '姓名',
  `age` int(3) DEFAULT NULL COMMENT '年龄',
  `birth` timestamp NULL DEFAULT NULL COMMENT '出生日期',
  PRIMARY KEY (`id`),
  KEY `idx_name` (`name`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

在创建 student 表的同时创建了二级索引 idx_name (name)

1.2 准备测试数据

创建三条二级索引回表测试数据

二、顺序I/O & 随机I/O

执行 SQL 语句如下:

select * 
from student
where name > '马百万' and name < '马百万3'

毫无疑问,展示出的记录是为 name = 马百万2 的记录。但是在查询的这个过程中存储数据底层发生了 顺序I/O & 随机I/O 两步操作

三、总结

name 字段我们建立了二级索引 idx_name,所以 name 字段底层也是根据 B+Tree 的结构进行了相关排序,由于 B+Tree 的特性之一:数据页内的记录是按照索引列的大小顺序排成一个单向链表

那么 马百万 - 马百万3 这几条记录在磁盘中相邻的,存储在一个数据页或是多个相邻数据页中。这样,我们可以快速的将数据从磁盘读取到内存中,这种读取方式被称为顺序IO

二级索引的 B+Tree 叶子节点中存储的并不是记录行,而是主键相关信息,根据主键再去聚簇索引结果集中找寻到结果相关记录,这就是一个回表的过程,而 随机I/O 就是在回表过程中产生的

比如我们刚才查到记录ID主键如果不相连的话,那么在存储层面就可能是不存在同一个数据页当中。这个时候我们想要获取学生信息,就需要根据主键访问更多的数据页,这也就是随机I/O

从性能上来说: 顺序IO随机I/O 更快
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
15天前
|
存储 关系型数据库 MySQL
Mysql索引总结(1)
Mysql索引总结(1)
23 0
|
15天前
|
存储 关系型数据库 MySQL
MySQL 索引的10 个核心要点
MySQL 索引的10 个核心要点
20 0
|
15天前
|
SQL 关系型数据库 MySQL
MySQL8.0索引新特性
MySQL8.0索引新特性
17 0
|
1天前
|
存储 SQL 关系型数据库
完蛋!😱 我被MySQL索引失效包围了!
完蛋!😱 我被MySQL索引失效包围了!
|
1天前
|
SQL 存储 关系型数据库
MySQL的3种索引合并优化⭐️or到底能不能用索引?
MySQL的3种索引合并优化⭐️or到底能不能用索引?
|
1天前
|
SQL 存储 关系型数据库
MySQL索引及事务
MySQL索引及事务
10 2
|
1天前
|
存储 SQL 关系型数据库
MySQL索引,看这一篇就够了!
MySQL索引,看这一篇就够了!
|
2天前
|
Java 关系型数据库 MySQL
MySQL 索引事务
MySQL 索引事务
12 0
|
2天前
|
存储 关系型数据库 MySQL
MySQL的优化利器⭐️Multi Range Read与Covering Index是如何优化回表的?
本文以小白的视角使用通俗易懂的流程图深入浅出分析Multi Range Read与Covering Index是如何优化回表
|
2天前
|
存储 SQL 关系型数据库
MySQL 底层数据结构 聚簇索引以及二级索引 Explain的使用
MySQL 底层数据结构 聚簇索引以及二级索引 Explain的使用
14 0