mysql回表查询是什么,回表查询的使用
作者:小小少年_ 发布时间:2024-01-26 01:57:17
在说到什么是回表查询的时候,有两个概念需要先解释清楚:分别是聚集索引(聚簇索引)和非聚集索引(非聚簇索引)
聚集索引和非聚集索引
MySQL规定,在使用InnoDB存储引擎的时候,必须且仅有一个聚集索引,非聚集索引也就是普通索引就看自己设置的有多少个了
聚集索引和非聚集索引的区别
1.聚集索引中的非叶子节点存储的是表的主键,非聚集索引的非叶子节点存储的是自己设置的索引字段对应的值(如果是联合索引,那就是联合索引的几个字段对应的值)
2.聚集索引的叶子节点,存储着当前表中每条记录的所有信息;非聚集索引的叶子节点,只存储当前记录对应的主键ID(也就是聚集索引的非叶子节点存储的值)
下面这张图是在网上找的一张截图
大致就是这个意思:左边的是主键索引(聚集索引),右边的是普通索引(非聚集索引)
那回表是什么
如果是通过非主键索引进行查询,select所要获取的字段不能通过非主键索引获取到,需要通过非主键索引获取到的主键,从聚集索引再次查询一遍,获取到所要查询的记录,这个查询的过程就是回表
通过执行计划的Extra字段的值,可以看到当前sql是否进行了回表
如果Extra字段值为null,我不太确定是否是一定走回表的(待确认)
但是如果Extra为Using index,则表示当前查询,通过索引覆盖就可以获取到当前select要的值,无需通过回表查询记录
验证
create TABLE hui_biao_test (id int not null auto_increment,name varchar(20),age int(11),first_name varchar(20),CONSTRAINT pk_id PRIMARY KEY(id));
create index index_name on `hui_biao_test`(name);
这是我的sql,创建了一张表,
explain select id,name from `hui_biao_test` where name = '张三';
explain select name from `hui_biao_test` where name = '张三';
explain select name,age from `hui_biao_test` where name = '张三';
下面截图分别是这三个sql的执行计划,可以发现:
第一个sql和第二个sql的Extra是Using index,说明前两个sql是索引覆盖,无需回表即可查询到当前要用的数据;
但是第三个sql就不可以,因为有一个age字段,在name这个索引中,没有age字段的信息,只有id和name(name索引对应的B+树中的非叶子节点就是name字段的值,id就是叶子节点存储的元素),所以需要通过回表,去主键索引查询到对应的记录,然后获取到对应的age属性
假如说我把name和age设置为联合索引,那最后一个sql的执行计划就会有变化
可以看到,这个sql的执行计划中Extra就是Using index
说明当前联合索引的非叶子节点中,存储的是联合索引对应的信息;仅通过联合索引就可以获取到select所需要的信息,这样,就无须再经过主键索引查询了
所以,这就是回表的概念
来源:https://blog.csdn.net/CPLASF_/article/details/108799381
猜你喜欢
- CSS网页布局应该避免滥用div元素一直是我们倡导的,以合适的HTML标签组织文档是CSS网页布局的基础。页面中div与span元素的使用是
- 简介rpc:远程过程调用协议。简单的来说就是客户端可以很方便得远程调用服务端的接口程序,而不用管底层是如何实现的。XML-RPC的全称是XM
- PyTorch创建自己的数据集图片文件在同一的文件夹下思路是继承 torch.utils.data.Dataset,并重点重写其 __get
- MySql:MySQL数据库实现分页比较简单,提供了 LIMIT函数。一般只需要直接写到sql语句后面就行了。LIMIT子 句可以用来限制由
- 一、实战场景Flask 框架实现用户的注册,登录和登出。二、主要知识点flask_login 插件使用SQLAlchemy 基础操作用户基础
- 特点:1.图片预载入,载入后再显示。意图一次呈现,不会让一块一块下载破坏你的页面,绝佳的用户体验,颠覆传统的浏览器呈现图片的处理方式(需要后
- 1069错误(由于登录失败而无法启动服务)解决方法在本版面出现这个问题的频率也算是很高的了,新手通常会比较多遇到这个问题原因很简单,安装SQ
- 本文实例讲述了PHP模板引擎Smarty中变量的使用方法。分享给大家供大家参考,具体如下:一、概述:Smarty 是 PHP 众多模板引擎中
- 一、FFmpeg 多个音频合并的2种方法多个mp3文件合并成一个mp3文件一种方法是连接到一起ffmpeg64.exe -i "c
- 介绍我们在实际的开发工作中需要将django框架与swagger进行集成,用于生成API文档。网上也有一些关于django集成swagger
- 介绍残差网络是何凯明大神的神作,效果非常好,深度可以达到1000层。但是,其实现起来并没有那末难,在这里以tensorflow作为框架,实现
- 本文实例讲述了php获取文章内容第一张图片的方法。分享给大家供大家参考,具体如下:<?php$temp=mt_rand(1,4);$p
- 前言光流flow特征中包含了一个视频当中运动相关的信息,在视频动作定位当中光流特征使用的比较多,所以记录一下提取光流特征的方法。使用的方法是
- 我在配置mysql时将配置文件中的默认存储引擎设定为了InnoDB。今天查看了MyISAM与InnoDB的区别,在该文中的第七条“MyISA
- 加密解密字符串的asp函数,如用于ASP链接地址栏参数的加密,看代码就明白。比如:show.asp?id=DB26538FA54C70E1E
- 嗯,你可以说我很无聊。最近疯狂加班,今天才得以有时间搞一个CSS的像素图来消遣休息下。先看效果:运行代码框<!DOCTYPE html
- 引言本篇文章所依赖的python环境是:如果你还没了解过什么是WSGI,建议先查询一下相关资料,或者查看上一篇文章:python|探寻WSG
- 一、项目需求爬取排行榜小说的作者,书名,分类以及完结或连载二、项目分析目标url:“https://www.qidian.com/rank/
- 管理认证系统最简单的方法是通过管理界面。然而,当你需要绝对的控制权的时候,有一些低层 API 需要深入专研,我们将在下面的章节中讨论它们。创
- PHP xpath() 函数定义和用法xpath()函数运行对 XML 文档的 XPath 查询。如果成功,该函数返回 SimpleXMLE