一文解答什么是MySQL的回表
作者:m0_67403073 发布时间:2024-01-18 02:41:56
引言
简单来说,回表就是 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树不会。
如何避免回表?
使用覆盖索引,所谓覆盖索引就是指索引中包含了查询中的所有字段,这种情况下就不需要再进行回表查询了。
来源:https://blog.csdn.net/m0_67403073/article/details/126080893
![](https://www.aspxhome.com/images/zang.png)
![](https://www.aspxhome.com/images/jiucuo.png)
猜你喜欢
- 第一种方案、最简单、普通的方法:SELECT TOP 30 * FROM ARTICLE WHERE ID NOT IN(SELECT TO
- 最近研究验证码识别,需要生成大量验证码,最方便的是使用captcha库来生成验证码,网上代码仅仅使用默认设置,但是它还有很多参数可以设定,于
- 前言numpy.linalg模块包含线性代数的函数。使用这个模块,可以计算逆矩阵、求特征值、解线性方程组以及求解行列式等。本文讲给大家介绍关
- 写在前面很长一段时间内,我都在研究在线地图的开发者文档,百度地图和高德地图的开发者中心提供了丰富的在线地图服务,虽然有一定的权限限制,但不得
- 函数: # 什么是函数:一系列python语句的组合,可以在程序中运行一次或者多次# 一般是完成具体的独立的功能# 为什么要使用函数# 代码
- 简介bisect 库是 Python 标准库中的一部分,它提供了二分查找的功能。二分查找是一种在有序列表中查找某一特定元素的搜索算法。它的时
- 复制 复制是从一个MySQL服务器(master)将数据拷贝到另外一台或多台MySQL服务器
- 不知道用ASP写代码的朋友是不是和我有一样的感受,ASP中最头疼的就是调试程序的时候不方便,我想可能很多朋友都会用这样的方法&ldq
- 程序调用远端服务,为了确保可用性最好在使用前进行健康检测,将异常的服务排除。#!/usr/bin/perl#use strict;use I
- 和YSlow一样,“Page Speed”也是一个基于firebug附加组件的FireFox插件。虽然听起来有点拗口,但是意思很容易理解:如
- 一、爬虫是什么? 在进行大数据分析或者进行数据挖掘的时候,数据源可以从某些提供数据统计的网站获得,也可以从某些文献或内部资料中获得
- 网上的SQL优化的文章实在是很多,说实在的,我也曾经到处找这样的文章,什么不要使用IN了,什么OR了,什么AND了,很多很多,还有很多人拿出
- 引言“深入认识Python内建类型”这部分的内容会从源码角度为大家介绍Python中各种常用的内建类
- 图片修复程序-可用于水印去除在现实的生活中,我们可能会遇到一些美好的或是珍贵的图片被噪声干扰,比如旧照片的折痕,比如镜头上的灰尘或污渍,更或
- 先由exp把数据卸出到文件系统, 产生一个.dmp文件, 然后必要时再由imp将数据装入数据库. 对于一般中小型数据库来说, 全数据库的ex
- 写给自己1. 首先,确定你的问题是:Jupyter-notebook可以正常运行,但是不弹出默认浏览器,例如下图(只有下图,浏览器死活没动静
- 通过无能的baidu逛了一圈,发现有两三段能用的代码,不过参考之下,发现还有不足的:不能拷贝有合并格式的sheet、没有拷贝cell的相关格
- 背景:pytest以特定规则搜索测试用例,所以测试用例文件、测试类以及类中的方法、测试函数这些命名都必须符合规则,才能被pytest搜索到并
- 如何做一个检索结果带链接的检索?具体代码和说明如下:<% data=request.form("search_da
- UUID 全称是 Universally unique identifier,它是一种识别符,使用任意的计算机都可以生成,不需要一个中央数据