一文解答什么是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 29 MySQL
超详细教你怎么升级Mysql的版本
May 19 MySQL
.Net Core导入千万级数据至Mysql的步骤
May 24 MySQL
浅谈MySQL user权限表
Jun 18 MySQL
VS2019连接MySQL数据库的过程及常见问题总结
Nov 27 MySQL
Mysql中一千万条数据怎么快速查询
Dec 06 MySQL
MySQL数据库完全卸载的方法
Mar 03 MySQL
mysql中数据库覆盖导入的几种方式总结
Mar 25 MySQL
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
Apr 12 MySQL
mysql中如何用命令创建联合唯一索引
Apr 20 MySQL
MySQL事务的隔离级别详情
Jul 15 MySQL
MySQL索引失效十种场景与优化方案
May 08 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
php生成zip压缩文件的方法详解
2013/06/09 PHP
PHP 输出URL的快捷方式示例代码
2013/09/22 PHP
php获取网页中图片、DIV内容的简单方法
2014/06/19 PHP
php链表用法实例分析
2015/07/09 PHP
自定义min版smarty模板引擎MinSmarty.class.php文件及用法
2016/05/20 PHP
(推荐一个超好的JS函数库)S.Sams Lifexperience ScriptClassLib
2007/04/29 Javascript
javascript StringBuilder类实现
2008/12/22 Javascript
javascript中encodeURI和decodeURI方法使用介绍
2013/05/06 Javascript
JavaScript中Cookie操作实例
2015/01/09 Javascript
jQuery源码解读之hasClass()方法分析
2015/02/20 Javascript
JS显示下拉列表框内全部元素的方法
2015/03/31 Javascript
JavaScript使用shift方法移除素组第一个元素实例分析
2015/04/06 Javascript
AngularJS入门教程之链接与图片模板详解
2016/08/19 Javascript
深入浅析JS是按值传递还是按引用传递(推荐)
2016/09/18 Javascript
Zabbix添加Node.js监控的方法
2016/10/20 Javascript
Vue实现购物车功能
2017/04/27 Javascript
vue-cli 首屏加载优化问题
2018/11/06 Javascript
Angular PWA使用的Demo示例
2019/01/31 Javascript
详解easyui 切换主题皮肤
2019/04/04 Javascript
基于JS实现web端录音与播放功能
2019/04/17 Javascript
单线程JavaScript实现异步过程详解
2020/05/19 Javascript
ES2020让代码更优美的运算符 (?.) (??)
2021/01/04 Javascript
[00:32]2016完美“圣”典风云人物:Maybe宣传片
2016/12/05 DOTA
[49:35]KG vs SECRET 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
python数据结构之链表的实例讲解
2017/07/25 Python
Python列表推导式与生成器用法分析
2018/08/02 Python
python调用百度语音REST API
2018/08/30 Python
Pytorch环境搭建与基本语法
2020/06/03 Python
AJAX检测用户名是否存在的方法
2021/03/24 Javascript
银行实习的自我鉴定
2013/12/10 职场文书
英文商务邀请信
2014/01/22 职场文书
幼儿园保教管理制度
2014/02/03 职场文书
安全责任书模板
2014/07/22 职场文书
高温慰问简报
2015/07/21 职场文书
python全面解析接口返回数据
2022/02/12 Python