我的编程空间,编程开发者的网络收藏夹
学习永远不晚

一文解答什么是MySQL的回表

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

一文解答什么是MySQL的回表

引言

简单来说,回表就是 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 的理解。

用一幅图来表示,其它的就不再过多解释了:

这里只是简单介绍一下 B-Tree 和 B+Tree 的区别:

  • B+树中只有叶子节点会带有指向记录的指针,而B树则所有节点都带有,在内部节点出现的索引项不会再出现在叶子节点中。
  • B+树中所有叶子节点都是通过指针连接在一起,而B树不会。

如何避免回表?

使用覆盖索引,所谓覆盖索引就是指索引中包含了查询中的所有字段,这种情况下就不需要再进行回表查询了。

到此这篇关于一文解答什么是MySQL的回表的文章就介绍到这了,更多相关MySQL回表内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

一文解答什么是MySQL的回表

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

一文解答什么是MySQL的回表

这篇文章主要介绍了一文解答什么是MySQL的回表,回表就是 MySQL要先查询到主键索引,然后再用主键索引定位到数据,文章围绕主题展开详细的内容介绍,需要的朋友可以参考一下
2022-11-13

一文解答为什么MySQL的count()方法这么慢

目录前言count()的原理各种count()方法的原理允许粗略估计行数的场景必须精确估计行数的场景总结前言mysql用count方法查全表数据,在不同的存储引擎里实现不同,myisam有专门字段记录全表的行数,直接读这个字段就好了。而i
2022-07-01

mysql回表查询是什么,回表查询的使用

目录javascript聚集索引和非聚集索引聚集索引和非聚集索引的区别那回表是什么验证在说到什么是回表查询的时候,有两个概念需要先解释清楚:分别是聚集索引(聚簇索引)和非聚集索引(非聚簇索引)聚集索引和非聚集索引mysql规定,在使用I
2022-11-21

mysql回表查询优化的方法是什么

MySQL回表查询是指在使用索引扫描后,仍需要通过主键再次访问表数据的操作。这种情况通常发生在需要查询的列不在索引中,或者是使用覆盖索引无法满足查询需求的情况下。为了优化回表查询,可以采取以下方法:覆盖索引:尽可能使用覆盖索引,即索引包含
mysql回表查询优化的方法是什么
2024-04-09

Python判断回文链表的方法是什么

小编今天带大家了解Python判断回文链表的方法是什么,文中知识点介绍的非常详细。觉得有帮助的朋友可以跟着小编一起浏览文章的内容,希望能够帮助更多想解决这个问题的朋友找到问题的答案,下面跟着小编一起深入学习“Python判断回文链表的方法是
2023-06-26

mysql新建一个表的方法是什么

要在MySQL中创建一个新表,可以使用CREATE TABLE语句,语法如下:CREATE TABLE table_name (column1 datatype,column2 datatype,column3 datatype,...
mysql新建一个表的方法是什么
2024-05-06

win10为什么装不回win7的详细解答

许多人选择升级,因为Win10系统具有快速启动功能,并且界面兼具Win8和Win7的特点,简单易用。但是win10系统的自动更新功能却让很多朋友反感,想装回win7却没有办法了,这是怎么回事呢?下面来看看具体的介绍吧。1、重启电脑时不停按F
2023-07-24

一文了解什么是JWT

JSON WEB Token是一种基于JSON的、用于在网络上声明某种主张的令牌,由三部分组成: 头信息, 消息体和签名,下面就一起来了解一下什么是JWT
2023-05-19

MySQL回表查询与索引覆盖的区别是什么

这篇文章主要介绍“MySQL回表查询与索引覆盖的区别是什么”,在日常操作中,相信很多人在MySQL回表查询与索引覆盖的区别是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL回表查询与索引覆盖的区别
2023-07-05

MySQL的表空间是什么

今天我要跟你分享的话题是:“大家常说的表空间到底是什么?究竟什么又是数据表?” 这其实是一个概念性的知识点,当作拓展知识。涉及到的概念大家了解一下就好,涉及的参数,留个印象就好。 一、什么是表? 但凡是用过MySQL都知道,直观上看,MyS
2022-05-23

mysql insert返回值指的是什么

本篇内容主要讲解“mysql insert返回值指的是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql insert返回值指的是什么”吧!在mysql中
2023-04-14

阿里云老客户服务器是什么?一个全面的解答

随着云计算技术的不断发展,越来越多的企业和个人开始考虑将业务上云。而在众多云服务商中,阿里云无疑是最具影响力的一家。作为一个阿里云的老客户,你可能已经对阿里云的各种产品和服务有所了解。然而,你是否了解阿里云的老客户服务器是什么?这篇文章将为你全面解答这个问题。阿里云的老客户服务器是一种基于阿里云云计算平台的服务器
阿里云老客户服务器是什么?一个全面的解答
2023-10-30

mysql表空间指的是什么

MySQL表空间是指存储表数据和索引的物理空间。在MySQL中,每个数据库都由一个或多个表空间组成,每个表空间又由一个或多个数据文件组成。表空间可以分为系统表空间和用户表空间。系统表空间包含了一些系统表和系统数据库的元数据,通常是以文件形式
2023-10-19

一文详解MySQL中数据表的外连接

因为MySQL是关系型数据库,数据是拆分重组在多个数据表里面的。所以我们势必要从多个数据表中提取数据,通过SQL语句的内连接与外连接就能够实现多表查询了,本文就来讲讲MySQL的外连接
2022-11-13

编程热搜

目录