一文解答什么是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数据库并展示在前端页面的实现代码
May 02 MySQL
MySQL获取所有分类的前N条记录
May 07 MySQL
MySQL中VARCHAR与CHAR格式数据的区别
May 26 MySQL
MySQL系列之七 MySQL存储引擎
Jul 02 MySQL
为什么MySQL分页用limit会越来越慢
Jul 25 MySQL
Node-Red实现MySQL数据库连接的方法
Aug 07 MySQL
为什么MySQL 删除表数据 磁盘空间还一直被占用
Oct 16 MySQL
详解MySql中InnoDB存储引擎中的各种锁
Feb 12 MySQL
mysql聚集索引、辅助索引、覆盖索引、联合索引的使用
Feb 12 MySQL
mysql使用instr达到in(字符串)的效果
Apr 03 MySQL
MySQL数据库安装方法与图形化管理工具介绍
May 30 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
英雄试炼之肉山谷—引领RPG新潮流
2020/04/20 DOTA
php数组去除空值函数分享
2015/02/02 PHP
PHP单例模式定义与使用实例详解
2017/02/06 PHP
thinkphp框架类库扩展操作示例
2019/11/26 PHP
奇妙的js
2007/09/24 Javascript
JavaScript效率调优经验
2009/06/04 Javascript
jquery easyui的tabs使用时的问题
2010/03/23 Javascript
javascript模拟的Ping效果代码 (Web Ping)
2011/03/13 Javascript
JavaScript对数字的判断与处理实例分析
2015/02/02 Javascript
Jquery日历插件制作简单日历
2015/10/28 Javascript
javascript实现网页端解压并查看zip文件
2015/12/15 Javascript
Dojo获取下拉框的文本和值实例代码
2016/05/27 Javascript
jQuery增加和删除表格项目及实现表格项目排序的方法
2016/05/30 Javascript
ES6新特性之变量和字符串用法示例
2017/04/01 Javascript
详解vue表单验证组件 v-verify-plugin
2017/04/19 Javascript
JS设计模式之数据访问对象模式的实例讲解
2017/09/30 Javascript
JavaScript实现移动端弹窗后禁止滚动
2020/05/25 Javascript
python生成指定长度的随机数密码
2014/01/23 Python
Python实现的插入排序算法原理与用法实例分析
2017/11/22 Python
python os用法总结
2018/06/08 Python
python实现坦克大战游戏 附详细注释
2020/03/27 Python
Python Selenium 之数据驱动测试的实现
2019/08/01 Python
python matplotlib 画dataframe的时间序列图实例
2019/11/20 Python
django model 条件过滤 queryset.filter(**condtions)用法详解
2020/05/20 Python
Python配置pip国内镜像源的实现
2020/08/20 Python
Mytheresa中国官网:德国时尚奢侈品商城
2017/08/04 全球购物
世界排名第一的万圣节服装店:Spirit Halloween
2018/10/16 全球购物
在校生党员自我评价
2013/09/25 职场文书
技术人员面试提纲
2013/11/28 职场文书
个人社会实践自我鉴定
2014/03/24 职场文书
优秀团员自我评价范文
2014/04/23 职场文书
党的群众路线查摆剖析材料
2014/10/10 职场文书
写给医生的感谢信
2015/01/22 职场文书
挂靠协议书
2015/01/27 职场文书
班主任自我评价范文
2015/03/11 职场文书
不同意离婚上诉状
2015/05/23 职场文书