一文解答什么是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复制问题的三个参数分析
Apr 07 MySQL
MySQL创建高性能索引的全步骤
May 02 MySQL
详解MySQL集群搭建
May 26 MySQL
如何自己动手写SQL执行引擎
Jun 02 MySQL
分析mysql中一条SQL查询语句是如何执行的
Jun 21 MySQL
MySQL系列之九 mysql查询缓存及索引
Jul 02 MySQL
Mysql8.0递归查询的简单用法示例
Aug 04 MySQL
Mysql关于数据库是否应该使用外键约束详解说明
Oct 24 MySQL
SQL语法CONSTRAINT约束操作详情
Jan 18 MySQL
MySQL 字符集 character
May 04 MySQL
mysql性能优化以及配置连接参数设置
May 06 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
全国FM电台频率大全 - 23 四川省
2020/03/11 无线电
php中ob_flush函数和flush函数用法分析
2015/03/18 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
在laravel框架中使用model层的方法
2019/10/08 PHP
日期 时间js控件
2009/05/07 Javascript
Javascript String对象扩展HTML编码和解码的方法
2009/06/02 Javascript
Javascript 学习书 推荐
2009/06/13 Javascript
javascript json2 使用方法
2010/03/16 Javascript
JavaScript常用全局属性与方法记录积累
2013/07/03 Javascript
jquery自定义函数的多种方法
2014/01/09 Javascript
提升jQuery的性能需要做好七件事
2016/01/11 Javascript
浅析jQuery中使用$所引发的问题
2016/05/29 Javascript
Vue.js组件使用开发实例教程
2016/11/01 Javascript
JavaScript原生实现观察者模式的示例
2017/12/15 Javascript
Vue cli+mui 区域滚动的实例代码
2018/01/25 Javascript
详解使用React进行组件库开发
2018/02/06 Javascript
vue中的provide/inject的学习使用
2018/05/09 Javascript
webpack之引入图片的实现及问题
2018/10/08 Javascript
Vue-Router基础学习笔记(小结)
2018/10/15 Javascript
基于js判断浏览器是否支持webGL
2020/04/18 Javascript
简单解决Python文件中文编码问题
2015/11/22 Python
一些常用的Python爬虫技巧汇总
2016/09/28 Python
python中matplotlib的颜色及线条控制的示例
2018/03/16 Python
对python实现模板生成脚本的方法详解
2019/01/30 Python
详细整理python 字符串(str)与列表(list)以及数组(array)之间的转换方法
2019/08/30 Python
python 利用toapi库自动生成api
2020/10/19 Python
python绕过图片滑动验证码实现爬取PTA所有题目功能 附源码
2021/01/06 Python
小学生2014国庆节演讲稿:祖国在我心中
2014/09/21 职场文书
工作时间擅自离岗检讨书
2014/10/24 职场文书
2014年学生会干事工作总结
2014/11/07 职场文书
2015年度护士个人工作总结
2015/04/09 职场文书
2015年中学团委工作总结
2015/07/22 职场文书
升学宴学生致辞
2015/07/27 职场文书
2015年国庆放假通知范文
2015/08/18 职场文书
日本读研:怎样写好一篇日本研究计划书?
2019/07/15 职场文书
Springboot中如何自动转JSON输出
2022/06/16 Java/Android