一文解答什么是MySQL的回表


Posted in MySQL onAugust 05, 2022

引言

简单来说,回表就是 MySQL 要先查询到主键索引,然后再用主键索引定位到数据。

下面,对一些问题进行分析与回答:

  • 什么是聚簇索引?什么是非聚簇索引?
  • 为什么回表要先查到主键索引?
  • 主键索引和非主键索引有什么区别?
  • 如何避免回表?

聚簇索引和非聚簇索引是什么?

MySQL 的索引有不同的角度的分类方式,例如:按数据结构分、按逻辑角度分、按物理存储分。

其中,按物理存储分有两种索引:聚簇索引非聚簇索引

简单来说,聚簇索引是主键索引

主键索引之外的就是非聚簇索引,非聚簇索引又叫辅助索引或者二级索引。

主键索引和非主键索引有什么区别?

相同点:都使用的是 B+Tree 。

不同点:叶子节点存储的数据不同

  • 主键索引的叶子节点存储的是一行完整的数据
  • 非主键索引的叶子节点存储的是主键值。叶子节点不包含记录的全部数据,非主键的叶子节点除了用来排序的 key 还包含一个书签(bookmark),其中存储了聚簇索引的 key。

那么这两种索引在使用方面上有什么区别呢?

使用主键索引查询:

# 主键索引的的叶子节点存储的是**一行完整的数据**,
# 所以只需搜索主键索引的 B+Tree 就可以轻松找到全部数据
select * from user where id = 1;

使用非主键索引查询:

# 非主键索引的叶子节点存储的是**主键值**,
# 所以MySQL会先查询到 name 列的索引的 B+Tree,搜索得到对应的主键值
# 然后再去搜索该主键值查询主键索引的 B+Tree 才可以找到对应的数据
select * from user where name = 'Jack';

可以看出使用非主键索引要比主键索引多使用一次 B+Tree。

B-Tree 和 B+Tree 的简单理解

理解聚簇索引和非聚簇索引的关键在于 B+Tree 的理解。

用一幅图来表示,其它的就不再过多解释了:

一文解答什么是MySQL的回表

这里只是简单介绍一下 B-Tree 和 B+Tree 的区别:

  • B+树中只有叶子节点会带有指向记录的指针,而B树则所有节点都带有,在内部节点出现的索引项不会再出现在叶子节点中。
  • B+树中所有叶子节点都是通过指针连接在一起,而B树不会。

如何避免回表?

使用覆盖索引,所谓覆盖索引就是指索引中包含了查询中的所有字段,这种情况下就不需要再进行回表查询了。

到此这篇关于一文解答什么是MySQL的回表的文章就介绍到这了,更多相关MySQL回表内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
MySQL InnoDB ReplicaSet(副本集)简单介绍
Apr 24 MySQL
浅谈mysql执行过程以及顺序
May 12 MySQL
MySQL时间盲注的五种延时方法实现
May 18 MySQL
MySQL连表查询分组去重的实现示例
Jul 01 MySQL
MySQL的全局锁和表级锁的具体使用
Aug 23 MySQL
MySQL连接控制插件介绍
Sep 25 MySQL
深入讲解数据库中Decimal类型的使用以及实现方法
Feb 15 MySQL
MySQL的InnoDB存储引擎的数据页结构详解
Mar 03 MySQL
详解Mysq MVCC多版本的并发控制
Apr 29 MySQL
讲解MySQL增删改操作
May 06 MySQL
Mysql表数据比较大情况下修改添加字段的方法实例
Jun 28 MySQL
MySQL性能指标TPS+QPS+IOPS压测
Aug 05 MySQL
MySQL一劳永逸永久支持输入中文的方法实例
Aug 05 #MySQL
SQLServer常见数学函数梳理总结
Aug 05 #MySQL
MySQL生成千万测试数据以及遇到的问题
Aug 05 #MySQL
面试官问我Mysql的存储引擎了解多少
MySQL索引失效场景及解决方案
Jul 23 #MySQL
MySQL添加索引特点及优化问题
Jul 23 #MySQL
MySQL表字段数量限制及行大小限制详情
Jul 23 #MySQL
You might like
Windows Apache2.2.11及Php5.2.9-1的安装与配置方法
2009/06/08 PHP
PHP通过iconv将字符串从GBK转换为UTF8字符集
2011/07/18 PHP
PHP实现PDO操作mysql存储过程示例
2019/02/13 PHP
关于Yii中模型场景的一些简单介绍
2019/09/22 PHP
PHP程序员简单的开展服务治理架构操作详解(二)
2020/05/14 PHP
详解PHP中curl_multi并发的实现
2020/06/08 PHP
表单切换,用回车键替换Tab健(不支持IE)
2011/07/20 Javascript
文本框倒叙输入让输入框的焦点始终在最开始的位置
2014/09/01 Javascript
js禁止页面刷新与后退的方法
2015/06/08 Javascript
学习JavaScript设计模式(多态)
2015/11/25 Javascript
使用基于Node.js的构建工具Grunt来发布ASP.NET MVC项目
2016/02/15 Javascript
基于JS实现textarea中获取动态剩余字数的方法
2016/05/25 Javascript
详解react如何在组件中获取路由参数
2017/06/15 Javascript
解决Angular.js中使用Swiper插件不能滑动的问题
2018/02/26 Javascript
webpack3里使用uglifyjs压缩js时打包报错的解决
2018/12/13 Javascript
微信小程序的线程架构【推荐】
2019/05/14 Javascript
JS实现可切换图片的幻灯切换效果示例
2019/05/24 Javascript
如何利用nodejs自动定时发送邮件提醒(超实用)
2020/12/01 NodeJs
Python网络编程之TCP与UDP协议套接字用法示例
2018/02/02 Python
Python实现查看系统启动项功能示例
2018/05/10 Python
Python List cmp()知识点总结
2019/02/18 Python
python 中的列表生成式、生成器表达式、模块导入
2019/06/19 Python
python+gdal+遥感图像拼接(mosaic)的实例
2020/03/10 Python
python递归调用中的坑:打印有值, 返回却None
2020/03/16 Python
使用Python解析Chrome浏览器书签的示例
2020/11/13 Python
使用HTML5的Canvas绘制曲线的简单方法
2015/09/08 HTML / CSS
玩具反斗城葡萄牙官方商城:Toys"R"Us葡萄牙
2016/10/21 全球购物
英国户外玩具儿童游乐设备网站:TP Toys(蹦床、攀爬框架、秋千、滑梯和游戏屋)
2018/04/09 全球购物
护理专业优质毕业生自荐书
2014/01/31 职场文书
会员卡清退活动总结
2014/08/27 职场文书
2014年家长学校工作总结
2014/11/20 职场文书
党员自我评价范文2015
2015/03/03 职场文书
2015年餐厅服务员工作总结
2015/04/23 职场文书
第一节英语课开场白
2015/06/01 职场文书
入党积极分子培养人意见
2015/06/02 职场文书
关于考试抄袭的检讨书
2019/11/02 职场文书