05-Mysql夺命三连问:什么是索引下推?什么是索引覆盖?什么是回表?【Java面试总结】

2023-11-04

Mysql夺命三连问:什么是索引下推?什么是索引覆盖?什么是回表?

索引下推是mysql5.6 提出的一个查询优化方案,主要的目的是减少数据或查询中不必要的读取和计算,它的原理是将查询条件尽可能的推送到索引层面进行过滤,减少从磁盘读取的数据量和后续的计算开销。

回表:当查询条件涉及非聚簇索引而非聚簇索引本身无法提供查询所需的完整数据时,数据库需要执行回表操作从聚簇索引中获取缺失的数据,这个过程叫做回表。

在InnoDB的引擎中,所有数据是存储在聚簇索引中的,索引键值和行指针的数据结构存储在非聚簇索引中,当我们基于非聚簇索引查询数据,如果返回的列不能满足需求,就需要从聚簇索引中再进行一次查找。

聚簇索引:聚簇索引定义了表的物理排序顺序,并决定了数据行在磁盘上的存储位置。数据行按照聚簇索引的排序顺序直接存储在磁盘上,聚簇索引本身就是表的数据存储结构。(数据存储、每张表聚簇索引有且只有一个,一般指主键索引,当无主键时可以是唯一索引,如两者均无则InnoDB存储引擎会自动生成一个隐藏的主键,并将其作为聚簇索引);

非聚簇索引:除了聚簇索引外的其他索引,旨在加快查询效率。在InnoDB中,一张表可以有多个非聚簇索引,非聚簇索引本身不存储数据,而是存储索引键值、和行指针。通过非聚簇索引查找数据时,需要先定位到索引,然后通过行指针找到实际的数据行。

索引覆盖:一个查询可以完全通过索引来满足,而无需访问表的实际数据行,即无需回表;

索引覆盖的条件:查询条件包含在索引中

案例:假设有一个名为"users"的表,包含以下列:id、name、age、email,并且创建了一个名为"idx_age_email"的索引,包含列(age, email)

索引覆盖的情况:age, email查询条件

SELECT age, email FROM users WHERE age > 25;

无法索引覆盖的情况:name字段不属于索引字段中,还需要回表查询一次,因此不满足索引覆盖

SELECT name, email FROM users WHERE age > 25;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

05-Mysql夺命三连问:什么是索引下推?什么是索引覆盖?什么是回表?【Java面试总结】 的相关文章

  • 从另一台计算机访问 MYSQL

    我想开发一个java桌面应用程序 我想在其中设置服务器 这意味着我在这里使用mysql db 该数据库将仅存储在一台电脑上 其余所有用户都可以访问该数据库 所以 我听说了mysql远程连接 其中尝试了一些事情 这些措施如下 我的电脑已连接w
  • MySQL 和 Hibernate 之间的主键自增由谁负责?

    MySQL CREATE TABLE role id role INT 11 unsigned NOT NULL AUTO INCREMENT PRIMARY KEY id role AUTO INCREMENT 1 休眠 Entity p
  • 为什么这个基于java配置的Spring应用程序不能正常工作

    我最近开始了一个使用 Spring 框架的项目 目标是在没有 XML 配置文件 只有 Java 代码的情况下开发它 目前 我将以下文件添加到我的项目中 WebAppConfig java EnableWebMvc ComponentScan
  • Chrome 崩溃:尝试在空对象引用上调用虚拟方法“long android.view.accessibility.AccessibilityNodeInfo.getSourceNodeId()”

    在处理网页的搜索表单 JavaScript CSS HTML 时 每次单击网络搜索图标并且输入字段获得焦点时 Chrome 浏览器 Android 10 都会崩溃 崩溃报告中的调试堆栈跟踪显示 Attempt to invoke virtu
  • 将数据传递到表单时的重定向后获取?

    我有几个场景 servlet 需要将数据从数据库检索到的记录传递到 JSP 中的表单 目前 我将此信息存储在请求中 使用 RequestDispatcher 转发到页面 一切都很好 然而 这不符合 PRG 模式 AFAIK 并且当然意味着刷
  • 何时在java中使用get/set方法[重复]

    这个问题在这里已经有答案了 我想知道何时在我的类中使用 get 和 set 方法 getName setName 以及何时简单classVariable name 反而 classVariable getName 这是使用 set 和 ge
  • Java 应用程序可以检测到调试器已连接吗?

    我知道 jvm 启动选项可以让 jvm 等待附加调试器 这不是我在这里的意思 是否有可能从 Java 代码中也检测调试器的附件 以便我可以例如编写一个正在执行某些操作的 脚本 然后在某个时刻让我的应用程序等待调试器 不会 这些选项是 JVM
  • covertJSONtoSQL 在 NiFi 中返回空值

    我正在设计一项工作 使用以下命令将数据从 MySQL 中的数据库转移到另一个数据库 MySQL 执行SQL处理器随后将Avro转换为Json then 将Json转换为SQL then PutSQL如下流程图所示 将JSON转换为SQL返回
  • 如何在 JAVA servlet 中处理压缩 (gzip) HTTP 请求(不是响应) - 简单示例?

    我为这个问题苦苦挣扎了很长一段时间 在找到一个简单的解决方案后 想问一个问题和答案 这个问题在堆栈溢出时以不同的方式被多次提出 并且accepted solutions是partially correct and complex或谈论res
  • 使用 GIN 注入 Class

    有没有办法注入类类型Class
  • Java 8 流排序字符串列表[重复]

    这个问题在这里已经有答案了 我正在流上调用排序方法 java 文档说 Sorted 方法返回一个由该流的元素组成的流 并根据自然顺序排序 但是当我运行下面的代码时 List
  • swing - 在 JPanel 上单击组件

    好的 我有一个带有 GridLayout 的 JPanel 网格的每个单元格都包含另一个 JPanel 我希望能够做的是在 下方 JPanel 上有一个侦听器 然后它告诉我单击了哪个 覆盖 JPanel 这样我就可以对它和周围的 JPane
  • Java - 修剪字节数组中的尾随空格

    我有与此类似的字节数组 77 83 65 80 79 67 32 32 32 32 32 32 32 大致等于 M S A P O C when printed as chars 现在我想修剪尾随空白 使其看起来像 77 83 65 80
  • 从流中过滤/删除无效的 xml 字符

    首先 我无法更改 xml 的输出 它是由第三方生成的 他们在 xml 中插入无效字符 我得到了 xml 字节流表示形式的 InputStream 除了将流消耗到字符串中并对其进行处理之外 是否有一种更干净的方法来过滤掉有问题的字符 我找到了
  • Java 有现成的时钟同步解决方案吗?

    我们有一个大型的高性能软件系统 它由多个交互的 Java 进程 不是 EJB 组成 每个进程可以在同一台机器上 也可以在不同的机器上 某些事件在一个进程中生成 然后以不同的方式传播到其他进程以进行进一步处理等 出于基准测试的目的 我们需要创
  • 我们还需要迭代器设计模式吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • JPanel 无法使用 setSize 和 setPreferedSize

    请解释为什么它不起作用 您也可以发布解决方案来解决此问题 非常感谢您提前 public class Run extends JFrame Fields static JPanel jpanel private int x y Constru
  • 数组所有可能的组合

    我有一个字符串数组 ted williams golden voice radio 我希望这些关键字的所有可能组合采用以下形式 ted williams golden voice radio ted williams ted golden
  • 使用 Jsoup 选择没有类的 HTML 元素

    考虑一个像这样的 html 文档 div p p p p p class random class name p div 我们怎样才能选择所有p元素 但不包括p元素与random class name class Elements ps b
  • Jsplitpane 自动调整大小

    我有一个 JSPlitPane 它们之间有 50 的分隔线 这工作正常 但是 当我在右侧添加一些 JLabels 时 jsplitpane 会忽略我的 50 分隔符 左侧窗格会增加其大小 并会挤压右侧窗格 为什么会发生这种情况以及如何解决

随机推荐

  • 【Shell牛客刷题系列】SHELL11 转置文件的内容:继续awk命令的升级打怪之旅

    该系列是基于牛客Shell题库 针对具体题目进行查漏补缺 学习相应的命令 刷题链接 牛客题霸 Shell篇 该系列文章都放到专栏下 专栏链接为 专栏 Linux 欢迎关注专栏 本文知识预告 首先简单学习了rs命令 这个命令不常用 了解即可
  • 三种Python中两个列表数字“相加”的方法

    目录 for循环 map numpy 最近我在用Python处理数据时 需要将列表数据相加实现 累积 效果的 需要注意 我这里所说的列表相加 并非是下面这种 列表元素相加 的情况 list 1 1 2 3 list 2 4 5 6 prin
  • 虚拟机搭建Hadoop集群环境-CentOS篇

    文章目录 Linux环境安装 虚拟机环境准备 虚拟机克隆 修改虚拟机IP 修改主机名 创建普通用户 重启虚拟机 使用Xshell远程访问 集群搭建 安装 JDK 安装 Hadoop 关闭防火墙 其它节点虚拟机克隆 配置 SSH 无密钥登录
  • Qt5.12+VS2017环境下编译QtAV视频库

    1 QtAV是一个跨平台的开源视频库 使用了ffmpeg核心 https github com wang bin QtAV 版本号1 12 0 2 安装好Qt 同步QtAV视频库 在github主页下载相应的依赖库 我使用了QtAV dep
  • RestTemplate 的用法

    1 引入对应依赖 2 private final RestTemplate restTemplate 3 上代码 Service Slf4j public class CspWarehouseServiceImpl implements I
  • 小红书app复制链接转换为可直接访问链接

    当你在小红书复制某篇笔记链接 黏贴出来是这个样子的 这种链接只有打开小红书app才能够访问 那么怎么把这种链接转换为可直接访问的格式呢 执行下方代码即可 import requests import json def shortToLong
  • 代码随想录算法训练营19期第56天

    583 两个字符串的删除操作 代码随想录 初步思路 动态规划 总结 1 第一步先求出两个字符串的最长公共子序列长度 2 删除的最少步数 两个字符串的总长度减去两个最长公共子序列的长度 用时 45分钟 72 编辑距离 代码随想录 初步思路 动
  • 【LeetCode】二叉树题总结(持续更新)

    文章目录 理论 144 二叉树的前序遍历 递归与迭代 94 二叉树的中序遍历 递归与迭代 145 二叉树的后序遍历 递归与迭代 102 二叉树的层序遍历 226 翻转二叉树 101 对称二叉树 222 完全二叉树的节点个数 利用完全二叉树性
  • 前端CSS高频面试题附答案(2023)

    什么是CSS Box模型 它有哪些组成部分 CSS Box模型是指用于计算网页布局中元素大小 位置和边距的一种模型 它由四个组成部分组成 内容区域 即元素的实际内容 内边距 元素周围的空白区域 边框和外边距 什么是BFC 块级格式化上下文
  • Flask使用MySQL指南

    一 首先进入开场白 场景 几个概念和基础知识 1 SQLAlchemy alchemy 单词译为 炼金术 魔力 即表示 SQLAlchemy是个有魔力的东西 官网 http www sqlalchemy org 百度搜索SQLAlchemy
  • 《这就是区块链》之区块链基础(4)--去中心化概念

    如上图所示 在之前的3篇文章中 我们讲了区块链的加密系统以及区块链的链表结构 对区块链的 物理结构 有了初步的认识 但是 聪明的你肯定会想到 哈希算法和数字签名是互联网初期的产物 根本不是区块链特有的东西 对 如果区块链仅仅是哈希指针的话
  • metasploit简单使用-生成木马反弹shell连接

    metasploit简单使用 在Kali中运行msfconsole 运行下列命令生成test exe木马 use evasion windows windows defender exe set filename test exe set
  • python pip install error: Microsoft Visual C++ 14.0 is required

    现象 Python 安装某些包的时候 由于需要C 进行编译 可能会出现 Microsoft Visual C 14 0 is required 比如 pip install marisa trie 解决办法 1 下载编译好的 whl 文件
  • 继电器控制电路原理解析说明

    继电器驱动电流一般需要20 40mA或更大才能使继电器吸合 继电器的线圈电阻100 200欧姆 因此必须进行扩流 即驱动 图1 21所示为用NPN型三极管驱动继电器的电路图 图中阴影部分为继电器电路 继电器线圈作为集电极负载而接到集电极和正
  • 【软件测试】(四)测试用例怎么写

    文章目录 测试用例基本要素 1 评价好的测试用例的标准 2 根据需求写测试用例 3 测试用例的设计方法 3 1 基于需求进行测试用例的设计 3 2 具体的设计用例的方法 3 2 1 等价类 3 2 2 边界值 3 2 3 错误猜测法 3 2
  • php不可见字符,php怎么处理不可见字符

    php处理不可见字符的方法 首先创建一个PHP文件 然后定义一个filterNonPrintableChar方法 接着在方法体内通过while语句实现过滤不可见字符的功能逻辑 最后运行该文件即可 php过滤不可见字符 编码知识 ASCII码
  • waitpid的作用

    waitpid的使用 waitpid用于等待特定的进程结束之后 主进程再继续执行 这时主进程会进入阻塞状态 在fork之后 如果子进程不使用waitpid 则可能时主进程先结束 也可能时子进程先结束 子进程 include
  • Spring核心概念

    BeanDefinition BeanDefinition表示Bean定义 BeanDefinition中存在很多属性用来描述一个Bean的特点 比如 class 表示Bean类型 scope 表示Bean作用域 单例或原型等 lazyIn
  • python3 leecode之快乐数

    题目 编写一个算法来判断一个数 n 是不是快乐数 快乐数 定义为 对于一个正整数 每一次将该数替换为它每个位置上的数字的平方和 然后重复这个过程直到这个数变为 1 也可能是 无限循环 但始终变不到 1 如果 可以变为 1 那么这个数就是快乐
  • 05-Mysql夺命三连问:什么是索引下推?什么是索引覆盖?什么是回表?【Java面试总结】

    Mysql夺命三连问 什么是索引下推 什么是索引覆盖 什么是回表 索引下推是mysql5 6 提出的一个查询优化方案 主要的目的是减少数据或查询中不必要的读取和计算 它的原理是将查询条件尽可能的推送到索引层面进行过滤 减少从磁盘读取的数据量