讲师中心 微信公众号
AI工具推荐 视频效率加速

如何优化MySQL中的聚合函数查询_利用索引覆盖GROUP BY字段

雨伟吖_3268

雨伟吖_3268

发布时间:2026-05-30 17:53:46

|

968人浏览过

|

来源于php中文网

原创

GROUP BY 查询慢主因是未走索引,出现Using temporary或Using filesort即索引失效;需按WHERE等值条件→GROUP BY字段顺序建联合索引,并避免函数、模糊查询等导致索引失效的操作。

如何优化mysql中的聚合函数查询_利用索引覆盖group by字段

GROUP BY 查询慢,八成是因为没走索引,而不是数据量大。 一旦执行计划里出现 Using temporary 或 Using filesort,基本可以断定索引没用上——这时候加索引比调参数、换硬件更直接有效。

为什么 GROUP BY 必须靠索引“有序性”才能快

MySQL 的 GROUP BY 不是边扫边分组,而是依赖索引的物理顺序来自然归并:如果索引叶子节点已经是按 dept 排好序的,那扫描时遇到相同 dept 就自动聚成一组,无需建临时表、也不用额外排序。

  • 没有索引 → 全表扫描 + 内存/磁盘临时表 + 排序 → Using temporary; Using filesort
  • 有单列索引 (dept) → 可跳过排序,但 WHERE 条件(如 status = 1)仍要全表过滤
  • 有联合索引 (status, dept) → 先用 status = 1 快速定位连续数据段,再在该段内按 dept 自然分组,一气呵成

联合索引怎么建才真正覆盖 GROUP BY 场景

关键不是“包含字段”,而是“顺序匹配访问路径”。索引列顺序必须服从查询中 WHERE 等值条件 → GROUP BY 字段 → (可选)ORDER BY 字段的逻辑链条。

MySQL
MySQL

编写正确的MySQL查询,避免字符集、索引和锁方面的常见陷阱。

下载
  • 查询是 SELECT dept, COUNT(*) FROM user WHERE status = 1 GROUP BY dept → 建 INDEX(status, dept),不是 (dept, status)
  • 如果还带 ORDER BY dept DESC,且 MySQL 版本 ≥ 8.0,可用 INDEX(status, dept DESC) 避免 filesort
  • 若 SELECT 中还有 MAX(created_at),而 created_at 不在索引里 → 回表开销大,考虑扩展为 INDEX(status, dept, created_at)(覆盖索引)
  • 切忌把非等值条件(如 time > '2025-01-01')放在联合索引最左 → 它会截断索引,后面字段失效

哪些写法会让索引彻底失效

即使索引建对了,SQL 写法不对照样白搭。常见“自废武功”操作:

  • SELECT name, COUNT(*) FROM user GROUP BY dept → name 既不在 GROUP BY 里,也没套聚合函数,MySQL 5.7+ 严格模式直接报错;宽松模式下强制走临时表
  • GROUP BY UPPER(dept) → 函数包裹字段,索引无法匹配,除非建函数索引(MySQL 8.0.13+)
  • WHERE dept LIKE '%tech' → 左模糊,索引失效;改用前缀匹配 dept LIKE 'tech%' 才能用上
  • GROUP BY dept ORDER BY COUNT(*) DESC → COUNT(*) 是计算值,不可能被索引覆盖,必然触发 filesort,别硬优化

EXPLAIN 里怎么看 GROUP BY 是否走索引

盯死 type 和 Extra 两列:

  • type: index 或 range(不是 ALL),且 key 显示用了哪个索引 → 成功走索引
  • Extra 里没有 Using temporary 和 Using filesort → 分组和排序都由索引承担
  • 如果 rows 值远小于表总行数,说明 WHERE 条件已高效过滤 → 索引设计合理
  • 注意 key_len:它告诉你实际用了索引的前几列,比如索引是 (a,b,c),key_len = 4 表示只用了 a(假设 a 是 INT),b 和 c 没参与,可能分组或排序仍会出问题

真正难的不是建索引,而是判断 WHERE 和 GROUP BY 的字段组合是否构成“可截断+可排序”的连续索引区间。很多慢查卡在“以为建了索引就万事大吉”,却忽略了等值条件的位置和字段顺序的刚性约束。

热门AI工具

更多
UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

4423

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

931

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

1169

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

6361

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

3183

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

6340

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

8641

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

1170

2024.04.29

剧云故事大纲与分场规划教程
剧云故事大纲与分场规划教程

本专题讲解剧云梗概与多级大纲功能,覆盖全局、分集、分场结构生成,以及主线冲突、剧情节点和场次顺序调整。

0

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 189人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn