当前位置: 首页 > news >正文

回表查询、覆盖索引

一、回表查询

如果索引列在select所需获得的列中或者根据一次索引查询就能获得记录就不需要回表,如果select所需获得列中有大量的非索引列,索引就需要到表中找到相应的列的信息,这就是回表。

二、InnoDB聚集索引

聚集索引是一种特殊的索引类型,它将数据行的物理存储顺序与索引键的逻辑顺序保存一致。在InnoDB中,表数据本身就是按照聚集索引组织的,这是与MyISAM等存储引擎的根本区别。数据行存储在索引的叶子节点中,表数据在磁盘上按照聚集索引键值的顺序存储,每个InnoDB表必须有且只有一个聚集索引。

  • 聚集索引的确定规则【按以下优先选择】
  1. 主键:显示定义的主键作为聚集索引
  2. 第一个非空唯一索引:如果没有主键
  3. 内部生成的隐藏列:如果以上都没有,InnoDB自动生成6字节的ROW_ID作为聚集索引
  • 物理存储结构

聚集索引B+树结构:
┌─────────────────┐
│ 根节点(非叶子) │ ← 存储索引键和指针
├─────────────────┤
│ 中间节点(非叶子) │ ← 存储索引键和指针
├─────────────────┤
│ 叶子节点(存储数据) │ ← 存储完整的行数据
└─────────────────┘

三、二级索引(非聚类索引)的工作原理

在InnoDB中,所有非聚类索引都称为二级索引,其叶子节点不包含完整数据行,而是存储对应的主键值。

-- 查询语句 SELECT * FROM users WHERE name = 'Alice'; -- 执行步骤: -- 1. 在idx_name索引树中查找'Alice' → 获得主键id值 -- 2. 使用该id值到聚集索引中查找完整数据行 ← 这就是"回表查询"

四、覆盖索引

只需要在一棵索引树上就能获取SQL所需的所有列数据,无需回表,速度更快。explain的输出结果Extra字段为Using index时,能够触发索引覆盖。

实现索引覆盖的方法常有:将被查询的字段,建立到联合索引里去。

create table user ( id int primary key, name varchar(20), sex varchar(5), index(name) )engine=innodb;

当我们使用如下代码时

select id,name from user where name='shenjian';

能够命中name索引,索引叶子节点存储了主键id,通过name的索引树即可获取id和name,无需回表,符合索引覆盖,效率较高。

http://www.cnnetsun.cn/news/73051.html

相关文章:

  • Desktop/照片太多存不下?MAZANOKE+cpolar是让存储空间+“变大”+的秘密
  • 深入理解Java的 JIT(即时编译器)
  • Electron 桌面应用开发:前端与原生交互原理及性能优化
  • LangChain+Qwen-Image-Edit-2509实现跨模态检索与编辑一体化
  • Screen Translator:打破语言壁垒的智能屏幕翻译工具解决方案
  • 少侠游戏库引入Wan2.2-T2V-5B:为独立开发者提供动态素材生成
  • JL — AC695X — 配置工具的使用
  • Wan2.2-T2V-5B结合OpenWRT打造嵌入式AI视频网关
  • NS模拟器管理新利器:ns-emu-tools全面实战手册
  • 外卖订单自动化采集工具完整使用指南:美团饿了么数据抓取解决方案
  • Git 下载加速技巧:使用CDN镜像快速拉取Qwen3-VL-8B
  • Windows系统权限突破:RunAsTI实战完全指南
  • 开源大模型新星:FLUX.1-dev镜像助力高精度文生图应用落地
  • AI音乐创作新纪元:ACE-Step开源模型助力非专业用户轻松作曲
  • 有界队列VS无界队列:阻塞队列中的“有限”与“无限”哲学
  • 10分钟搞定Windows虚拟显示器:免费扩展多屏工作空间
  • 微信小程序表格组件实战:从零到精通的数据展示方案
  • Qwen3-VL-30B跨模态推理性能评测:为何需要强大GPU支持?
  • 大数据领域分布式计算的分布式事务处理
  • Qwen-Image-Edit-2509支持对象替换与风格迁移的底层原理分析
  • Stable Diffusion 3.5 FP8如何实现低显存占用?技术架构深度解读
  • 44、高效运维与快速输入:实用技巧与解决方案
  • FLUX.1-dev vs Stable Diffusion:谁才是文生图领域的王者?
  • 52、版本控制全解析:从CVS到Word处理器的多维度探索
  • 如何用1个开源工具搞定全平台标签打印?LPrint终极指南
  • 基于半经验模型的熔断器燃弧过程计算与分析
  • OpenPLC Editor 完整教程:5步掌握工业自动化编程
  • PyTorch分布式训练FP8版本Stable Diffusion 3.5是否可行?初步探索
  • C# WPF界面设计:为ACE-Step打造桌面级音乐创作软件
  • Res-Downloader终极指南:3步搞定全网资源批量下载