一文解答什么是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 相关文章推荐
JDBC连接的六步实例代码(与mysql连接)
May 12 MySQL
Mysql中存储引擎的区别及比较
Jun 04 MySQL
MySQL8.0.18配置多主一从
Jun 21 MySQL
MySQL 8.0 驱动与阿里druid版本兼容问题解决
Jul 01 MySQL
为什么MySQL分页用limit会越来越慢
Jul 25 MySQL
详细聊聊MySQL中慢SQL优化的方向
Aug 30 MySQL
MySQL 数据类型详情
Nov 11 MySQL
Linux7.6二进制安装Mysql8.0.27详细操作步骤
Nov 27 MySQL
mysql聚集索引、辅助索引、覆盖索引、联合索引的使用
Feb 12 MySQL
MySQL数据库中的锁、解锁以及删除事务
May 06 MySQL
MySQL数据库 安全管理
May 06 MySQL
MySQL数据库表约束讲解
Jun 21 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
2006/12/23 PHP
PHP 多维数组排序(usort,uasort)
2010/06/30 PHP
php下使用iconv需要注意的问题
2010/11/20 PHP
PHP中运用jQuery的Ajax跨域调用实现代码
2012/02/21 PHP
PIGCMS 如何关闭聊天机器人
2015/02/12 PHP
自己动手制作jquery插件之自动添加删除行功能介绍
2011/10/14 Javascript
js面向对象 多种创建对象方法小结
2012/05/21 Javascript
使用cluster 将自己的Node服务器扩展为多线程服务器
2014/11/10 Javascript
AngularJS基础知识
2014/12/21 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 图片库
2015/01/09 Javascript
基于jQuery实现的菜单切换效果
2015/10/16 Javascript
在其他地方你学不到的jQuery小贴士和技巧(欢迎收藏)
2016/01/20 Javascript
基于jquery实现百度新闻导航菜单滑动动画
2016/03/15 Javascript
非常漂亮的相册集 使用jquery制作相册集
2016/04/28 Javascript
JS插件plupload.js实现多图上传并显示进度条
2016/11/29 Javascript
jquery设置css样式的多种方法(总结)
2017/02/21 Javascript
你可能不知道的CORS跨域资源共享
2019/03/13 Javascript
在vue+element ui框架里实现lodash的debounce防抖
2019/11/13 Javascript
Vue+Node实现的商城用户管理功能示例
2019/12/23 Javascript
[01:05:36]VP vs TNC Supermajor小组赛B组 BO3 第二场 6.2
2018/06/03 DOTA
[36:20]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.17
2020/12/18 DOTA
python中正则表达式的使用详解
2014/10/17 Python
Python中模块pymysql查询结果后如何获取字段列表
2017/06/05 Python
python3 pandas 读取MySQL数据和插入的实例
2018/04/20 Python
python 调用钉钉机器人的方法
2019/02/20 Python
python 实现手机自动拨打电话的方法(通话压力测试)
2019/08/08 Python
Python线程障碍对象Barrier原理详解
2019/12/02 Python
jupyter notebook 增加kernel教程
2020/04/10 Python
Anaconda配置pytorch-gpu虚拟环境的图文教程
2020/04/16 Python
Madewell美德威尔美国官网:美国休闲服饰品牌
2016/11/25 全球购物
Lee牛仔裤澳大利亚官网:美国著名牛仔裤品牌
2017/09/02 全球购物
个人简历自我鉴定
2013/10/11 职场文书
企业宗旨标语
2014/06/10 职场文书
廉政承诺书范文
2015/04/28 职场文书
2016先进集体事迹材料范文
2016/02/25 职场文书
导游词之潮音寺
2019/09/26 职场文书