什么是回表查询

简介: 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 层进行筛选的条件,下推到存储引擎层来进行筛选判断,这样能有效减少回表),通过减少回表次数进而提高查询效率。

相关文章
|
7天前
libicu-62.1-6.ky10.x86_64.rpm 安装步骤详解(麒麟V10系统)
本文介绍了在麒麟系统上安装libicu库的完整步骤:先通过rpm命令检查是否已安装,若未安装则下载指定版本的rpm包,使用sudo rpm命令进行安装,并通过验证命令确认安装成功。若出现依赖问题,可使用yum自动解决依赖并完成安装。
|
Java Spring 容器
解决Spring的UnsatisfiedDependencyException异常的方法
在Spring开发中,UnsatisfiedDependencyException异常意味着依赖注入失败,影响应用稳定性。该异常由Spring容器在无法满足bean依赖时抛出,常见原因包括bean定义错误、循环依赖、多个候选bean等。解决方法包括:检查bean定义和注入的正确性、解决循环依赖、确认依赖包的兼容性、使用@Qualifier或@Primary注解。通过日志、调试工具和异常对比来定位问题。持续学习Spring框架有助于更好地解决此类异常。
9676 1
|
5天前
|
安全 区块链 开发者
智能合约安全:DeFi 被黑的根本原因,真的只是“黑客太厉害”吗?
智能合约安全:DeFi 被黑的根本原因,真的只是“黑客太厉害”吗?
67 4
|
5天前
|
并行计算 API 开发者
DeepSeek V3 & Llama 3 API 推理指南:自建大模型 vLLM 集群 vs 大模型 LLM API Gateway 架构深度对比
2025年是大模型“百模大战”转入“推理落地”的关键一年。DeepSeek V3、Llama 3 70B 等开源权重的发布,让开发者有了更多选择。但当真正试图将这些模型部署到生产环境时,我们不仅要面对复杂的 CUDA 依赖,还要处理显存碎片、KV Cache 优化以及高昂的硬件成本。本文将从架构师视角,深度拆解目前主流的两种推理方案:**自建高性能推理集群** 与 **使用 API 聚合网关**。
77 3
|
4天前
|
存储 人工智能 自然语言处理
炎鹊:Nexus Agent v1.0架构下的专属AI模型大脑的技术实现路径
炎鹊AI推出「LLM+AIGA决策大脑+知识图谱+业务模型」四层架构,通过Nexus Agent引擎实现垂直场景深度适配。融合领域蒸馏、LoRA微调、任务闭环与低代码建模,提升行业AI准确率30%-50%,开发周期缩至2-4周,成本降60%以上,支持私有化部署与合规安全,助力企业高效构建专属AI大脑。(238字)
75 2
|
4天前
|
SQL 数据库 数据安全/隐私保护
手把手教你安装 SQLServer2014-x64-CHS附详细文步骤与避坑指南
下载解压SQL Server 2014安装包至根目录(路径勿含中文),断网后以管理员身份运行setup.exe。选择评估版,接受协议,勾选数据库引擎、管理工具等核心功能,设置混合验证模式并配置sa密码,将服务设为自动启动。安装完成后检查服务状态,确认“SQL Server (MSSQLSERVER)”正在运行即可使用。(238字)
|
8天前
|
存储 NoSQL Linux
2.4 Linux系统中的安装启动和连接
本文介绍在Linux系统部署单机MongoDB用于生产环境的完整步骤,包括下载、解压、目录配置、日志与数据路径设置、配置文件编写及服务启停方法。操作类似Windows,通过配置`mongod.conf`实现后台运行,支持命令行与图形工具连接,并提供防火墙处理与安全关闭服务方案,确保稳定运行。
|
26天前
|
SQL 弹性计算 安全
选购阿里云活动中的云服务器之后,后续购买并挂载云盘,设置密码及安全组教程参考
如果我们通过阿里云的活动购买云服务器,在选择配置参数的时候会发现通常情况下默认配置下只有系统盘,而没有数据盘。另外,还需要我们设置好云服务器的密码,配置安全组等基本操作之后才能使用。本文为大家展示当我们通过阿里云的活动购买完云服务器之后,后续购买挂载云盘及设置云服务器密码和安全组的相关流程,以供参考。
|
26天前
|
存储 关系型数据库 MySQL
为什么MySQL索引结构是B+tree
MySQL采用B+树作为索引结构,因其非叶子节点仅存键和指针,使每页可存储更多键,树层级更浅,查询更快。所有数据集中于叶子节点,查询效率稳定,且叶子节点形成双向链表,支持高效范围查询。
|
22天前
|
安全 关系型数据库 网络安全
Navicat通过SSH隧道连接数据库,详细步骤
通过SSH隧道连接数据库的本质是建立一个加密的安全通道。你的Navicat会先通过SSH协议登录到你的远程服务器,然后再通过这个加密的隧道连接服务器上的数据库服务。
117 1

热门文章

最新文章