什么是回表查询 ?

简介: MySQL中InnoDB引擎的聚簇索引将数据与索引存储在一起,每表仅一个;二级索引则分离存储,叶子节点保存主键值。回表查询需先查二级索引再查聚簇索引,性能较低。优化方式包括:使用主键查询、创建联合索引实现覆盖索引、利用MySQL 5.6+的索引下推功能,减少回表次数,提升查询效率。(238字)
  • 必答内容:

在MySQL默认的InnoDB存储引擎中,有两类索引,分别是:聚簇索引和二级索引。 聚簇索引,他的特点呢就是数据与索引存放在一块儿,B+tree索引结构的叶子节点保存了整行数据,而且在一张表中,聚簇索引有且仅有一个,默认主键索引就是聚簇索引。二级索引,指的是数据和索引分开存储,B+tree的叶子节点保存对应的主键,二级索引在一张表中可以有多个。

所谓回表查询,就指的是,在执行这条SQL语句的时候,先根据二级索引去检索出对应的主键值;然后再根据主键值,到聚簇索引中查询出对应的数据,这个过程就叫回表查询。 所以回表查询,是需要扫描两次索引的,性能相对来说会差一些。

  • 进阶内容:

所以,在项目开发中,我们进行SQL优化的时候,如果需求允许的情况下,尽量避免回表查询,主要从以下几个方面来做:

1). 业务允许的情况下,尽可能根据主键查询,使用聚集索引-避免回表查询。

2). 为表中的字段,根据业务需求创建合适的联合索引,查询时使用索引覆盖-避免回表查询。

3). 使用索引下推,减少回表查询的次数。【索引下推,是mysql5.6之后提供的功能】

  • 可能继续发问的问题:

你刚才提到索引下推,简单聊聊什么是索引下推?

索引下推(Index Condition Pushdown),是MySQL5.6后提供的功能,指的是在多条件查询SQL执行时,提前判断对应的搜索条件是否满足,满足了再去回表(就是将本应该在 server 层进行筛选的条件,下推到存储引擎层来进行筛选判断,这样能有效减少回表),通过减少回表次数进而提高查询效率。

相关文章
|
存储 关系型数据库 MySQL
MySQL中的回表
MySQL中的回表
|
11月前
|
Java
synchronized 锁升级
synchronized锁有偏向锁、轻量级锁、重量级锁三级,性能依次降低。单线程用偏向锁;交替加锁无竞争升级为轻量级锁;存在竞争则升级为重量级锁。自Java 6支持锁升级,Java 15起偏向锁被废弃,因性能收益有限且可能负优化。
|
12月前
|
人工智能 自然语言处理 开发者
Qoder 降价,立即生效!首购 2 美金/月
Qoder全球上线两月获数十万开发者信赖!现首购仅2美元/月,享全功能AI编程利器。集成顶尖模型,支持10万文件检索、智能体异步执行、CLI终端交互,助力高效开发。
2197 8
|
缓存 Java 开发者
【Spring】原理:Bean的作用域与生命周期
本文将围绕 Spring Bean 的作用域与生命周期展开深度剖析,系统梳理作用域的类型与应用场景、生命周期的关键阶段与扩展点,并结合实际案例揭示其底层实现原理,为开发者提供从理论到实践的完整指导。
1233 22
|
Web App开发 存储 缓存
如何精准清除特定类型或标签的缓存数据?
如何精准清除特定类型或标签的缓存数据?
1114 57
|
11月前
|
关系型数据库 数据库 文件存储
告别数字麻木,重拾消费感知:ezBookkeeping —— 您的轻量自托管记账伴侣
在数字支付时代,金钱变得抽象,ezBookkeeping 让消费重新可感。这款开源、自托管的轻量记账工具,支持 Docker 部署,兼顾隐私与易用,助你找回对支出的真实掌控,适合树莓派到 NAS 各类设备。
1277 0
告别数字麻木,重拾消费感知:ezBookkeeping —— 您的轻量自托管记账伴侣
|
存储 SQL 关系型数据库
MySQL语句详解:从基础到进阶的全面指南
MySQL语句详解:从基础到进阶的全面指南
|
11月前
|
人工智能 监控 算法框架/工具
AI模型云上部署(PAI平台)
本文介绍基于阿里云PAI平台的AI模型云上部署全流程实践,涵盖模型训练(PAI-DSW)、在线部署(PAI-EAS)、自动扩缩容、监控告警、A/B测试、成本控制及图像识别实战。通过全链路闭环方案,助力企业高效、稳定、低成本地落地AI能力,推动业务数字化转型。(238字)
1233 0
|
XML 设计模式 Java
这6种 Spring 依赖注入方式,你都会吗?
这6种 Spring 依赖注入方式,你都会吗?
2541 1
这6种 Spring 依赖注入方式,你都会吗?
|
存储 缓存 数据处理
简述计算机X86架构
【10月更文挑战第3天】本文介绍了计算机的基本工作原理,重点阐述了CPU(中央处理器)及其组成部分:运算单元、数据单元和控制单元的功能。文中解释了CPU通过总线与内存等设备通信的过程,并详细描述了指令执行的步骤,包括指令获取、数据处理和结果存储。此外,还介绍了地址总线和数据总线的作用,以及段寄存器在内存管理中的应用。最后,提供了一些基本的CPU指令示例。文中配有多幅插图帮助理解。