MySQL回表是什么?哪些情况下会回表

在这里插入图片描述

🏆作者简介,黑夜开发者,全栈领域新星创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。
🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。
🏆本文已收录于PHP专栏:MySQL的100个知识点。
🎉欢迎 👍点赞✍评论⭐收藏

文章目录

  • 🚀一、什么是MySQL的回表?
  • 🚀二、什么情况下会触发回表?
    • 🔎2.1 索引不Cover所有需要查询的字段
    • 🔎2.2 使用了非聚簇索引
    • 🔎2.3 使用了覆盖索引但超过了最大索引长度
  • 🚀三、哪些情况下不会触发回表?
    • 🔎3.1 覆盖索引
    • 🔎3.2 使用聚簇索引
  • 🚀四、回表操作的问题和场景
    • 🔎4.1 性能问题
    • 🔎4.2 数据一致性
    • 🔎4.3 是否使用覆盖索引的判断
  • 🚀五、总结


🚀一、什么是MySQL的回表?

在MySQL数据库中,回表(Look Up)指的是在进行索引查询时,首先通过索引定位到对应页,然后再根据行的物理地址找到所需的数据行。换句话说,回表是指根据索引查询到的主键值再去访问主键索引,从而获取完整的数据记录。

在这里插入图片描述

🚀二、什么情况下会触发回表?

MySQL的回表操作通常在以下情况下会发生:

🔎2.1 索引不Cover所有需要查询的字段

当查询语句中需要返回的列不在索引列上时,即使通过索引定位了相关行,仍然需要回表获取其他列的值。

🔎2.2 使用了非聚簇索引

非聚簇索引(Secondary Index)只包含了索引列的副本以及指向对应主键的引用,查询需要通过回表才能获取完整的行数据。

在这里插入图片描述

🔎2.3 使用了覆盖索引但超过了最大索引长度

在MySQL的InnoDB存储引擎中,每个索引项的最大长度是767字节,如果查询需要返回的字段长度超过了该限制,同样会触发回表操作。

需要注意的是,回表操作主要发生在读取操作(SELECT)中,写入操作(INSERT、UPDATE、DELETE)一般不会触发回表。

🚀三、哪些情况下不会触发回表?

在某些特殊情况下,MySQL的回表操作可以被避免:

🔎3.1 覆盖索引

如果查询的字段都在某个索引上,并且没有超过最大索引长度限制,MySQL可以直接从索引中获取所需数据,而无需回表。

🔎3.2 使用聚簇索引

InnoDB存储引擎的主键索引是聚簇索引,它包含了整个行的数据。当查询条件使用了主键或者通过主键查询时,MySQL可以直接从主键索引中获取所有需要的数据,无需回表。

在这里插入图片描述

🚀四、回表操作的问题和场景

回表操作虽然提供了更全面的数据信息,但也带来了一些问题和局限性。

🔎4.1 性能问题

回表操作通常需要访问两次索引,增加了IO开销和CPU消耗,对查询性能有一定的影响。特别是在高并发、大数据量的情况下,回表可能成为性能瓶颈。

🔎4.2 数据一致性

由于回表操作是基于物理地址来获取数据,如果在回表过程中发生了数据修改(如DELETE、UPDATE),则可能会读取到不一致或错误的数据。

🔎4.3 是否使用覆盖索引的判断

在选择是否使用覆盖索引时,需要综合考虑查询的字段以及字段长度,以及查询操作的频率和数据量。如果查询需要返回的字段较多或字段长度较长,可能需要权衡回表带来的性能损耗和数据完整性的需求。

在实际应用中,我们可以根据具体的场景来决定是否使用回表操作。下面列举了一些使用回表的典型场景:

需要返回更全面的数据:有些查询场景下,返回的字段可能不仅仅是索引所包含的列,此时回表可以提供更全面的数据信息。
使用非聚簇索引:当表中没有定义主键或者查询条件没有使用主键时,非聚簇索引成为主要的索引选择,但回表操作则难以避免。
超过最大索引长度限制:如果需要返回的字段长度超过了最大索引长度限制,即使使用了覆盖索引也无法避免回表,此时需要注意回表带来的性能损耗。

🚀五、总结

综上所述,MySQL的回表操作是在索引查询时,通过主键索引再次访问以获取完整数据记录的过程。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/88528.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PHP 安装Composer,vue前端依赖包

电脑安装Composer 官网下载:https://getcomposer.org/Composer-Setup.exe 后端安装: 检查是否安装依赖: 安装Composer install 或 Composer i 前端安装: yarn install 安装依赖

Python Pandas 处理Excel数据 制图

目录 1、饼状图 2、条形统计图 1、饼状图 import pandas as pd import matplotlib.pyplot as plt import numpy as np #from matplotlib.ticker import MaxNLocator # 解决中文乱码 plt.rcParams[font.sans-serif][SimHei] plt.rcParams[font.sans-serif]Microsoft YaHei …

【面试】一文讲清组合逻辑中的竞争与冒险

竞争的定义:组合逻辑电路中,输入信号的变化传输到电路的各级逻辑门,到达的时间有先后,也就是存在时差,称为竞争。 冒险的定义:当输入信号变化时,由于存在时差,在输出端产生错误&…

基于IDEA使用maven创建hibernate项目

1、创建maven项目 2、导入hibernate需要的jar包 <!--hibernate核心依赖--><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>5.4.1.Final</version></dependency><!--…

uni-app 编译报错 Error: pages.json解析失败,不符合 json 规范Unexpected token ‘)‘

问题 使用webstorm开发项目时&#xff0c;打开pages.json习惯性ctrlaltl把代码格式了&#xff0c;然后报错了。 接着使用HBuilder编译&#xff0c;但是一直显示在编译中&#xff0c;完全没有反映。重启编译器与重启电脑都没有用。 没管然后编译报错了。 加上逗号再运行还是报…

taro h5 formData上传图片的坑-Required request part ‘file‘ is not present

描述&#xff1a;用formData上传图片 1、生成formData const formData new FormData() formData.append(file, data) // data是file formData.append(xxx, xxx) // 添加其他参数2、用taro.request请求 Taro.request({url: xxxx,data: formData,header: {Content-Type: mult…

本地搭建CFimagehost私人图床【公网远程访问】

文章目录 1.前言2. CFImagehost网站搭建2.1 CFImagehost下载和安装2.2 CFImagehost网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;3.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 4.公网访问测…

【DevOps视频笔记】4.Build 阶段 - Maven安装配置

一、Build 阶段工具 二、Operate阶段工具 三、服务器中安装 四、修改网卡信息 五、安装 jdk 和 maven Stage1 : 安装 JDK Stage 2 : 安装 Maven 2-1 : 更换文件夹名称 2-2 : 替换配置文件 settings.xml- 2-3 : 修改settings.xml详情 A. 修改maven仓库地址 - 阿里云 B…

sqlmap安装以及运用

目录 一、sqlmap简介 linux系统安装 windows系统安装 二.sqlmap确定目标 (1) sqlmap直连数据库 (2) sqlmap的URL探测 (3) Sqlmap文件读取目标 (4) Sqlmap Google批量扫注入 一、sqlmap简介 sqlmap是一个开源的渗透测试工具&#xff0c;它可以自动化检测sql注入漏洞利用…

如何将PC电脑变成web服务器:将内网主机映射到外网实现远程访问

如何将PC电脑变成web服务器&#xff1a;将内网主机映射到外网实现远程访问 我是艾西&#xff0c;今天跟大家分享内容还是比较多人问的一个问题&#xff1a;如何将PC电脑变成web服务器。内网主机作为web服务器&#xff0c;内容包括本地内网映射、多层内网映射解决方案、绕过电信…

mybatis概述及搭建

目录 1.概述 2.mybatis搭建 1.创建一个maven项目&#xff0c;添加mybatis、mysql所依赖的jar 2.创建一个数据库表&#xff0c;及对应的java类 3.创建一个mybatis的核心配置文件&#xff0c;配置数据库连接信息&#xff0c;配置sql映射文件 4.创建sql映射文件&#xff0c;…

四川玖璨电商:2023怎样运营短视频?

​短视频的兴起和流行让越来越多的人关注和运营短视频号。如何运营短视频号&#xff0c;吸引更多的观众和粉丝&#xff1f;下面四川玖璨电商小编将介绍几个关键点。 首先&#xff0c;确定短视频的定位和主题非常重要。根据自己的兴趣和特长&#xff0c;确定一个独特的主题&…

R语言lasso惩罚稀疏加法(相加)模型SPAM拟合非线性数据和可视化

全文链接&#xff1a;https://tecdat.cn/?p33462 本文将关注R语言中的LASSO&#xff08;Least Absolute Shrinkage and Selection Operator&#xff09;惩罚稀疏加法模型&#xff08;Sparse Additive Model&#xff0c;简称SPAM&#xff09;。SPAM是一种用于拟合非线性数据的强…

idea新建Java-maven项目时,出现Dependency ‘ xxx(jar包名)‘ not found的解决方案

项目场景&#xff1a; 项目场景&#xff1a;使用idea创建maven项目时&#xff0c;导入简单依赖时&#xff08;本文以mysql-connector-java为例&#xff09;。 问题描述 问题&#xff1a; 首先&#xff0c;在创建新的maven项目中&#xff0c;出现下列两种情况&#xff1a; &am…

rabbitmq卸载重新安装3.8版本

卸载之前的版本的rabbitmq 卸载rabbitmq 卸载前先停止rabbitmq服务 /usr/lib/rabbitmq/bin/rabbitmqctl stop查看rabbitmq安装的相关列表 yum list | grep rabbitmq卸载rabbitmq相关内容 yum -y remove rabbitmq-server.noarch 卸载erlang 查看erlang安装的相关列表 …

java:Tomcat

文章目录 背景服务器web 服务器服务资源的分类服务器软件的分类nginx 和 tomact总结 安装Tomcatbrew安装官网压缩包安装IDEA集成IDEA插件 说明 背景 在讲 Tomcat 是啥之前&#xff0c;我们先来了解一些概念。 服务器 可以理解为一个高性能的电脑&#xff0c;但是这个电脑现在…

Linux:ansible自动化运维工具

环境介绍 当前所有执行权限我是在root下执行的&#xff0c;如果提示权限之类的&#xff0c;可以在每句命令前 加上 sudo ansible主服务器 192.168.0.194 另外两个客户端分别为 192.168.0.193 192.168.0.192 软件只需要在主服务器上安装&#xff0c;客户端不需…

Bootstrap的类container与类container-fluid有什么区别?

阅读本文前建议先阅读下面两篇博文&#xff1a; 怎么样通过Bootstrap已经编译好(压缩好)的源码去查看符合阅读习惯的源码【通过Source Map(源映射)文件实现】 在CSS中&#xff0c;盒模型中的padding、border、margin是什么意思&#xff1f; 以下是Bootstrap的类 container 的盒…

spring boot 3使用 elasticsearch 提供搜索建议

业务场景 用户输入内容&#xff0c;快速返回建议&#xff0c;示例效果如下 技术选型 spring boot 3elasticsearch server 7.17.4spring data elasticsearch 5.0.1elasticsearch-java-api 8.5.3 pom.xml <dependency><groupId>org.springframework.boot</gr…

牛客OJ 把字符串转换成整数

⭐️ 题目描述 &#x1f31f; O链接 https://www.nowcoder.com/practice/1277c681251b4372bdef344468e4f26e?tpId13&&tqId11202&rp6&ru/activity/oj&qru/ta/coding-interviews/question-ranking 思路&#xff1a; 首先需要检查第一位是否有符号位&#x…