MYSQLg高级------回表

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MYSQLg高级------回表

看回表之前大家需要 先对 聚簇索引和非聚簇索引 innoDB和MyISAM有一定的了解; 有兴趣看自行查看 :地址


一、什么是回表?


这先要从InnoDB的索引实现说起,InnoDB有两大类索引:


聚集索引(clustered index)


普通索引(secondary index)


主键索引包含该行所有数据,普通索引包含的只有该索引和id


其实非聚集索引 的过程就是所谓的回表;


通俗的来讲就是:如果select 所需要获得列中有非索引列,一次索引查询不能获取所有的信息,需要到表中找到相应列的ID; 在根据ID去去查询

对应表中具体的列的数据,这个过程就是回表;而根据一次索引查询就能获取所有列的信息,就不需要回表;(也就是聚集索引)


CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`deptId` int(11) DEFAULT NULL,
PRIMARY KEY (`id`) ,
KEY `fk_dept_id`(`deptId`)
)ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8;
INSERT INTO `atguigudb`.`user` (`id`, `name`, `deptId`) VALUES (1, '小闫', 10);
INSERT INTO `atguigudb`.`user` (`id`, `name`, `deptId`) VALUES (2, '老闫', 10);
INSERT INTO `atguigudb`.`user` (`id`, `name`, `deptId`) VALUES (3, '小闫01', 10);
INSERT INTO `atguigudb`.`user` (`id`, `name`, `deptId`) VALUES (4, '小闫02', 10);
INSERT INTO `atguigudb`.`user` (`id`, `name`, `deptId`) VALUES (5, '小闫03', 10);


执行下面的就不需要回表,因为根据主键查询方式,只需要查询ID这颗B+树即可;主键是唯一的根据这个唯一索引,MYSQL就能确定搜索到这条记录;

id为主键索引,主键索引就是聚集索引

聚集索引的叶子节点包含整给行的记录,一次查询就能获取所有的信息,故不需要回表

# 直接访问id 找到对应的值
select id,name,deptId FROM USER WHERE name='3';


下面这个sql就是需要回表的:因为name 是普通的索引,他的查询的方式,需要先查询name的索引树,然后得到id的主键为3,再到id索引树进行一次查询。即先定位主键值,再定位记录,再这个过程中虽然使用了索引,但实际上底层进行了两次索引的查询,这给过程就是回表;

#非聚簇索引 根据值找到id 根据id找到对应的值
select id,name,deptId FROM USER WHERE name="小闫01";
select id,name,deptId FROM USER WHERE name='3';


详细的 请查看 博客


希望可以帮助大家更好的理解吧;不足之处,请大家批评指正;

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
SQL 关系型数据库 MySQL
Mysql数据库第十三课-----------sql语句的拔高3--------直冲云霄
Mysql数据库第十三课-----------sql语句的拔高3--------直冲云霄
|
SQL 存储 关系型数据库
MySQL数据库第十四课--------sql优化---------层层递进 2
MySQL数据库第十四课--------sql优化---------层层递进
|
SQL 关系型数据库 MySQL
MySQL数据库第十四课--------sql优化---------层层递进1
MySQL数据库第十四课--------sql优化---------层层递进
|
关系型数据库 MySQL 数据库
MYSQLg高级-------分库分表之核心Sharding-Proxy 简介(二)
MYSQLg高级-------分库分表之核心Sharding-Proxy 简介(二)
99 0
MYSQLg高级-------分库分表之核心Sharding-Proxy 简介(二)
|
存储 SQL 缓存
MYSQLg高级------聚簇索引和非聚簇索引
MYSQLg高级------聚簇索引和非聚簇索引
138 0
|
SQL 关系型数据库 MySQL
MySQL数据库第九课--------join连接四件套------不错的哦哦哦
MySQL数据库第九课--------join连接四件套------不错的哦哦哦
|
SQL 关系型数据库 MySQL
MySQl数据库第八课-------SQL命令查询-------主要命脉2
MySQl数据库第八课-------SQL命令查询-------主要命脉
|
SQL 关系型数据库 MySQL
MySQl数据库第八课-------SQL命令查询-------主要命脉 1
MySQl数据库第八课-------SQL命令查询-------主要命脉
116 0
|
SQL 关系型数据库 MySQL
MySQL数据库第十一课---------SQl语句的拔高-------水平提升
MySQL数据库第十一课---------SQl语句的拔高-------水平提升