一文解答什么是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之DML语言
Apr 05 MySQL
MySQL 重写查询语句的三种策略
May 10 MySQL
MySQL主从搭建(多主一从)的实现思路与步骤
May 13 MySQL
一看就懂的MySQL的聚簇索引及聚簇索引是如何长高的
May 25 MySQL
mysql事务对效率的影响分析总结
Oct 24 MySQL
SQL语法CONSTRAINT约束操作详情
Jan 18 MySQL
MySQL优化常用的19种有效方法(推荐!)
Mar 17 MySQL
MySQL如何快速创建800w条测试数据表
Mar 17 MySQL
MySQL 外连接语法之 OUTER JOIN
Apr 09 MySQL
mysql使用 not int 子查询隐含陷阱
Apr 12 MySQL
MySQL中EXPLAIN语句及用法
May 20 MySQL
SQL语句中EXISTS的详细用法大全
Jun 25 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简单的会话类代码
2011/08/08 PHP
学习php设计模式 php实现适配器模式
2015/12/07 PHP
thinkPHP5框架auth权限控制类与用法示例
2018/06/12 PHP
微博@符号的用户名提示效果。(想@到谁?)
2010/11/05 Javascript
基于jquery的多功能软键盘插件
2012/07/25 Javascript
js二维数组排序的简单示例代码
2014/01/24 Javascript
js判断游览器类型及版本号的代码
2014/05/11 Javascript
jQuery中prevUntil()方法用法实例
2015/01/08 Javascript
Javascript验证方法大全
2015/09/21 Javascript
详解nodejs与javascript中的aes加密
2016/05/22 NodeJs
9个让JavaScript调试更简单的Console命令
2016/11/14 Javascript
基于ES6 Array.of的用法(实例讲解)
2017/09/05 Javascript
微信禁止下拉查看URL的处理方法
2017/09/28 Javascript
详解vue2.0+vue-video-player实现hls播放全过程
2018/03/02 Javascript
Vue在页面右上角实现可悬浮/隐藏的系统菜单
2018/05/04 Javascript
nodejs 十六进制字符串型数据与btye型数据相互转换
2018/07/30 NodeJs
Vue页面跳转动画效果的实现方法
2018/09/23 Javascript
[01:54]TI4西雅图DOTA2选手欢迎晚宴 现场报道
2014/07/08 DOTA
零基础写python爬虫之使用Scrapy框架编写爬虫
2014/11/07 Python
Ubuntu下安装PyV8
2016/03/13 Python
从源码解析Python的Flask框架中request对象的用法
2016/06/02 Python
python机器学习实战之树回归详解
2017/12/20 Python
深入分析python数据挖掘 Json结构分析
2018/04/21 Python
pandas删除指定行详解
2019/04/04 Python
零基础使用Python读写处理Excel表格的方法
2019/05/02 Python
澳大利亚自然和有机的健康美容产品一站式商店:Ziani Beauty
2017/12/28 全球购物
日本卡普空电视游戏软件公司官方购物网站:e-CAPCOM
2018/07/17 全球购物
加拿大领先家居家具网上购物:Aosom.ca
2020/05/27 全球购物
财务会计专业毕业生自荐信
2013/10/02 职场文书
离婚协议书样本
2015/01/26 职场文书
台风停课通知
2015/04/24 职场文书
八年级语文教学反思
2016/03/03 职场文书
30岁前绝不能错过的10本书
2019/08/08 职场文书
在Java中Collection的一些常用方法总结
2021/06/13 Java/Android
redis不能访问本机真实ip地址的解决方案
2021/07/07 Redis
联想win10摄像头打不开怎么办?win10笔记本摄像头打不开解决办法
2022/04/08 数码科技