广告
返回顶部
首页 > 资讯 > 数据库 >一文解答什么是MySQL的回表
  • 601
分享到

一文解答什么是MySQL的回表

MySQL回表回表 2022-11-13 14:11:30 601人浏览 八月长安
摘要

目录引言聚簇索引和非聚簇索引是什么?主键索引和非主键索引有什么区别?B-Tree 和 B+Tree 的简单理解如何避免回表?引言 简单来说,回表就是 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回表内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: 一文解答什么是MySQL的回表

本文链接: https://www.lsjlt.com/news/171689.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • 一文解答什么是MySQL的回表
    目录引言聚簇索引和非聚簇索引是什么?主键索引和非主键索引有什么区别?B-Tree 和 B+Tree 的简单理解如何避免回表?引言 简单来说,回表就是 MySQL 要先查询到主键索引,...
    99+
    2022-11-13
    MySQL回表 回表
  • 一文解答为什么MySQL的count()方法这么慢
    目录前言count()的原理各种count()方法的原理允许粗略估计行数的场景必须精确估计行数的场景总结前言 mysql用count方法查全表数据,在不同的存储引擎里实现不同,myisam有专门字段记录全表的行数,直接读...
    99+
    2022-07-01
    MySQL的count()方法 MySQL count
  • mysql回表查询是什么,回表查询的使用
    目录聚集索引和非聚集索引聚集索引和非聚集索引的区别那回表是什么验证在说到什么是回表查询的时候,有两个概念需要先解释清楚:分别是聚集索引(聚簇索引)和非聚集索引(非聚簇索引) 聚集索引和非聚集索引 mysql规定,在使用I...
    99+
    2022-11-21
    mysql查询 mysql回表查询 回表查询
  • win10为什么装不回win7的详细解答
    许多人选择升级,因为Win10系统具有快速启动功能,并且界面兼具Win8和Win7的特点,简单易用。但是win10系统的自动更新功能却让很多朋友反感,想装回win7却没有办法了,这是怎么回事呢?下面来看看具体的介绍吧。1、重启电脑时不停按F...
    99+
    2023-07-24
  • Python判断回文链表的方法是什么
    小编今天带大家了解Python判断回文链表的方法是什么,文中知识点介绍的非常详细。觉得有帮助的朋友可以跟着小编一起浏览文章的内容,希望能够帮助更多想解决这个问题的朋友找到问题的答案,下面跟着小编一起深入学习“Python判断回文链表的方法是...
    99+
    2023-06-26
  • 一文了解什么是JWT
    目录起源session认证token认证什么是JWTJWT的数据结构HeaderPayloadSignatureJWT的优点怎么使用JWT总结起源 需要了解一门技术,首先从为什么产生...
    99+
    2023-05-19
    JWT
  • 一文了解Hive是什么
    目录一、Hive介绍Hive的优缺点Hive架构Hive用户接口Hive元数据的三种存储模式Hive数据存储架构原理Hive文件格式Hive本质Hive工作原理Hive数据类型一、H...
    99+
    2022-11-13
  • 一文了解什么是TypeScript?
    目录1.JavaScript的问题2.TypeScript的优势3.TypeScript的缺点4.TypeScript的运行环境5.作用域问题前言: TypeScript是Java...
    99+
    2022-11-12
  • 一文说透什么是MySQL的预编译
    目录一、什么是mysql的预编译?二、 如何使用预编译?2.1 MySQL预编译的语法三、使用PreparedStatement进行预编译3.1 开启查询日志3.2 开启预编译功能3.3 cachePrepStmts参数...
    99+
    2022-11-15
  • 一文详解MySQL中数据表的外连接
    目录为什么要使用外连接外连接简介左连接与右连接外连接练习①外连接练习②该章节的内容为多表连接查询的外连接,因为 MySQL 是关系型数据库,数据是拆分重组在多个数据表里面的。所以我们...
    99+
    2022-11-13
    MySQL数据表外连接 MySQL 外连接
  • MySQL回表查询与索引覆盖的区别是什么
    这篇文章主要介绍“MySQL回表查询与索引覆盖的区别是什么”,在日常操作中,相信很多人在MySQL回表查询与索引覆盖的区别是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL回表查询与索引覆盖的区别...
    99+
    2023-07-05
  • 阿里云老客户服务器是什么?一个全面的解答
    随着云计算技术的不断发展,越来越多的企业和个人开始考虑将业务上云。而在众多云服务商中,阿里云无疑是最具影响力的一家。作为一个阿里云的老客户,你可能已经对阿里云的各种产品和服务有所了解。然而,你是否了解阿里云的老客户服务器是什么?这篇文章将为...
    99+
    2023-10-30
    阿里 老客户 服务器
  • JavaScript中的回文数是什么
    本篇内容介绍了“JavaScript中的回文数是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2022-10-19
  • 【MySQL】一文带你了解表的增删改查 CRUD
    文章目录 1. 增加(Create)1.1 单行插入 + 全列插入1.2 多行插入 + 指定列插入 2. 查询(Retrieve)2.1 全列查询2.2 指定列查询2.3 查询字段为表达式2.4 别名2.5 去重2.6 排序 ...
    99+
    2023-08-16
    mysql 数据库 数据结构
  • 一文详解MySQL是如何解决幻读的
    目录前言什么是幻读?什么是普通读和当前读?普通读当前读普通读是如何避免幻读的?当前读是如何避免幻读的?总结前言 SQL标准中定义了4种隔离级别,分别是读未提交、读已提交、可重复读以及序列化。不同的隔离级别下,可以解决不同...
    99+
    2023-04-19
    mysql幻读 怎样解决mysql的幻读 mysql避免幻读
  • mysql insert返回值指的是什么
    本篇内容主要讲解“mysql insert返回值指的是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql insert返回值指的是什么”吧! ...
    99+
    2023-04-14
    mysql insert
  • 一文搞懂什么是MySQL前缀索引
    目录一、什么是前缀索引二、为什么要用前缀索引三、怎么创建前缀索引四、使用前缀索引需要注意的事项五、小结一、什么是前缀索引 所谓前缀索引,说白了就是对文本的前几个字符建立索引(具体是几个字符在建立索引时去指定),比如以产品...
    99+
    2022-09-29
  • MySQL的表空间是什么
    今天我要跟你分享的话题是:“大家常说的表空间到底是什么?究竟什么又是数据表?” 这其实是一个概念性的知识点,当作拓展知识。涉及到的概念大家了解一下就好,涉及的参数,留个印象就好。 一、什么是表? 但凡是用过MySQL...
    99+
    2022-05-23
    MySQL MySQL 表空间
  • 一文理解MySQL数据库的约束与表的设计
    目录1.数据库约束1.1 约束类型1.2 null 约束1.3 unique 唯一的约束1.4 default 默认值约束1.5 primary key 主键约束1.6 primary key auto_incremen...
    99+
    2022-11-15
  • python演示解答正则为什么是最强文本处理工具
    正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作