news 2026/5/5 10:18:27

松散索引扫描/跳跃索引扫描

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
松散索引扫描/跳跃索引扫描

松散索引扫描(Loose Index Scan)是 MySQL 优化器的一种高级查询策略,主要用于优化GROUP BYDISTINCT查询。

它的核心思想是:不需要扫描索引中所有的行,而是跳过不符合条件的行,直接“跳跃”到每个分组的第一个或最后一个匹配项上。


1. 核心原理:从“地毯式搜索”到“跳跃式前进”

在传统的**紧凑索引扫描(Tight Index Scan)**中,数据库会扫描索引中的每一条记录。而松散索引扫描则利用了索引的有序性,只读取每个组中极少数的行。

直观对比:

假设你在一个按(A, B)排序的索引中查找每个A的最小值:

  • 紧凑扫描:读取A=1的所有行找到最小值,再读取A=2的所有行……这就像翻完一整本书。
  • 松散扫描:读取A=1的第一行(由于有序,第一行必是最小值),然后直接跳到索引中A=2的起始位置。这就像直接看每章的目录。

2. 触发松散索引扫描的条件

MySQL 并不会对所有查询都使用这一策略,它通常需要满足以下严格条件:

  1. 单表查询:查询只涉及一张表。
  2. 前缀索引GROUP BYDISTINCT使用的列必须符合索引的最左前缀原则。
  3. 聚合函数限制:只支持MIN()MAX()。且这些函数的参数必须是索引中的列,并且紧跟在GROUP BY列之后。
  4. 完整性:索引中的所有列必须参与了查询(要么在GROUP BY中,要么在MIN/MAX中)。

3. 一个具体的示例

假设有一张表orders,索引为(customer_id, order_date)

SELECTcustomer_id,MIN(order_date)FROMordersGROUPBYcustomer_id;

执行逻辑:

  1. 数据库定位到索引的头部。
  2. 获取第一个customer_id(比如ID=100) 的第一条记录。
  3. 关键动作:由于索引是排好序的,ID=100的第一条记录对应的order_date一定是该客户最早的订单。
  4. 跳跃:数据库直接通过索引树的 B+ 结构,寻找比ID=100大的下一个customer_id
  5. 重复此过程,直到索引结束。

4. 如何在 EXPLAIN 中识别?

当你运行EXPLAIN时,如果在Extra列中看到以下字样,说明松散索引扫描生效了:

Using index for group-by

这标志着查询性能得到了质的提升,因为数据库处理的数据行数从全表记录数降低到了分组数


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/5 10:17:28

Go+React构建自托管RSS阅读器:Larafeed架构解析与部署实践

1. 项目概述:一个现代、自托管的RSS阅读器如果你和我一样,对信息获取有洁癖,厌倦了算法推荐的信息茧房,同时又对市面上一些RSS阅读器的陈旧界面或复杂部署望而却步,那么angristan/larafeed这个项目绝对值得你花时间研究…

作者头像 李华
网站建设 2026/5/5 10:13:26

AI助手技能管理工具skill:像npm管理依赖一样管理提示词

1. 项目概述:一个为AI助手管理“技能包”的命令行工具如果你和我一样,日常开发中重度依赖像 Claude Code、Cursor 这类 AI 编程助手,那你肯定也遇到过这样的烦恼:每次新建一个项目,或者换一台机器,那些精心…

作者头像 李华
网站建设 2026/5/5 10:11:11

Sunshine终极故障排查指南:解决游戏串流服务器8大常见问题

Sunshine终极故障排查指南:解决游戏串流服务器8大常见问题 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine Sunshine作为一款强大的自托管游戏串流服务器,为…

作者头像 李华
网站建设 2026/5/5 10:11:10

C语言中的类型修饰符const

使用const限定类型声明的对象,可能会被编译器放置在只读内存区域中;如果程序中从未获取过某个const对象的地址,它甚至可能根本不会被存储(直接被优化掉)。任何试图修改const限定类型对象的行为,都会导致未定…

作者头像 李华
网站建设 2026/5/5 10:08:28

url-opener:一个被低估的效率工具,一键批量打开预设网址

1. 项目概述:一个被低估的效率工具如果你和我一样,每天需要在浏览器里打开十几个甚至几十个固定的网址——比如开发时的一整套后台管理、API文档、监控面板、测试环境;或者运营时的一批数据看板、社交媒体后台、内容管理平台——那你一定对重…

作者头像 李华