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

简介: 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
相关文章
|
7天前
|
存储 关系型数据库 MySQL
【MySQL系列】-回表、覆盖索引真的懂吗
【MySQL系列】-回表、覆盖索引真的懂吗
10 1
|
1月前
|
存储 SQL 关系型数据库
【MySQL进阶-03】深入理解mysql的索引分类,覆盖索引,覆盖索引失效,回表,MRR
【MySQL进阶-03】深入理解mysql的索引分类,覆盖索引,覆盖索引失效,回表,MRR
39 0
|
2月前
|
存储 关系型数据库 MySQL
MySQL回表
MySQL回表(Index Lookup)是指在使用非覆盖索引进行查询时,需要通过回表操作获取完整的数据行。当查询的列不在索引中时,MySQL无法直接从索引中获取所需的数据,而是需要通过回表操作到主键索引或聚簇索引中查找完整的数据行。
37 0
|
2月前
|
存储 缓存 关系型数据库
MYSQL的覆盖索引和回表
MYSQL的覆盖索引和回表
38 0
|
4月前
|
SQL 关系型数据库 MySQL
阿里三面:MySQL回表的性能伤害有多大?
1 回表的性能消耗 无论单列索引 or 联合索引,一个索引就对应一个独立的B+索引树,索引树节点仅包含
85 0
|
10月前
|
存储 容灾 关系型数据库
Mysql回表与索引覆盖,联合索引问题
Mysql回表与索引覆盖,联合索引问题
54 0
Mysql回表与索引覆盖,联合索引问题
|
SQL 关系型数据库 MySQL
软件测试mysql面试题: SQL SELECT的顺序是什么?
软件测试mysql面试题: SQL SELECT的顺序是什么?
46 0
|
关系型数据库 MySQL
mysql中常见问题(where,group by,having顺序问题)
mysql中常见问题(where,group by,having顺序问题)
256 0
mysql中常见问题(where,group by,having顺序问题)
|
SQL 关系型数据库 MySQL
mysql in 排序 也可以按in里面的顺序来排序
mysql in 排序 也可以按in里面的顺序来排序
157 0
|
SQL 存储 关系型数据库
步步深入MySQL:架构-&gt;查询执行流程-&gt;SQL解析顺序!
一、前言 本文将从MySQL总体架构--->查询执行流程--->语句执行顺序来探讨一下其中的知识。 二、MySQL架构总览 架构最好看图,再配上必要的说明文字。
1062 0
推荐文章
更多