news 2026/6/23 3:25:44

SQL 调优全解:从 20 秒到 200 ms 的 6 步实战笔记(附脚本)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SQL 调优全解:从 20 秒到 200 ms 的 6 步实战笔记(附脚本)

一、阅读指引
1. 不会看执行计划 → 跳第 3 段
2. 索引失效/全表扫描 → 看第 4 段
3. 千万级分页卡顿 → 看第 5 段
4. 想直接抄代码 → 第 8 段有下载链接

二、测试环境
MySQL 8.0.34,16C64G,SSD;订单表 500w,明细表 2000w,脚本见第 8 段。

三、慢查询现场(20.3s→0.2s)
SQL:近 30 天已支付订单明细
SELECT o.order_id, o.user_id, d.goods_name, d.price
FROM orders o JOIN order_detail d ON o.order_id = d.order_id
WHERE o.status = 2 AND o.pay_time >= DATE_SUB(NOW(), INTERVAL 30 DAY);

EXPLAIN 结果:orders 表 type=ALL,rows≈500w,全程全表扫描。

四、索引补齐(一步降到 8.5s)
ALTER TABLE orders ADD INDEX idx_status_paytime (status, pay_time);
原则:等值放左,范围放右。再执行 type=range,rows≈60w。

五、覆盖索引 + 延迟关联(深分页通用,再降到 0.2s)
Step1:先拿主键(覆盖索引)
SELECT order_id
FROM orders
WHERE status = 2 AND pay_time >= DATE_SUB(NOW(), INTERVAL 30 DAY)
ORDER BY pay_time DESC LIMIT 1000000,20;

Step2:再回表 JOIN 明细
SELECT o.order_id, o.user_id, d.goods_name, d.price
FROM orders o JOIN order_detail d ON o.order_id = d.order_id
WHERE o.order_id IN (Step1 结果);

Step1 完全走索引不回表,Step2 只回表 20 行。

六、压测对比
原始:20.3s,扫描 500w 行
加索引:8.5s,扫描 60w 行
覆盖+延迟:0.2s,扫描 20 行

七、联合索引 10 条军规(速查表)
1. 等值放左,范围放右;like '%xx' 放最右
2. 禁止对索引列写函数(用区间代替 DATE())
3. OR 拆 UNION,或建合并索引
4. 区分度 <10% 不单独建索引
5. 单表索引 ≤6 个
6. 长字符串用前缀索引 url(30)
7. ORDER BY 字段放联合索引尾部
8. 覆盖索引优先,减少回表
9. 深分页用延迟关联
10. 亿级表优先分区+局部索引

八、一键复现脚本
# 表结构 + 500w 测试数据
wget https://gist.github.com/yourname/abc123/raw/init.sql
mysql -uroot -p < init.sql

九、一键巡检脚本
慢查询 TOP10:
SELECT sql_text, exec_count, avg_timer_wait/1e12 AS avg_sec
FROM performance_schema.events_statements_summary_by_digest
ORDER BY avg_timer_wait DESC LIMIT 10;

从未使用的索引:
SELECT * FROM sys.schema_unused_indexes;

十、口诀总结
“索引覆盖先,延迟关联深,执行计划看 type,千万分页也飞。”
收藏本文,下次慢查询直接照抄即可。欢迎在评论区晒出你的“秒优化”SQL!

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

固定头尾、中间滚动?用Flex + vh轻松搞定三栏布局

固定头尾、中间滚动&#xff1f;用Flex vh轻松搞定三栏布局固定头尾、中间滚动&#xff1f;用Flex vh轻松搞定三栏布局引言&#xff1a;为什么页面头尾固定这么让人头疼CSS Flex 布局快速上手指南——从“ Flex 是谁”到“ Flex 是我兄弟”1. 激活 Flex 模式2. 主轴与交叉轴—…

作者头像 李华
网站建设 2026/6/22 8:14:28

微电网恒功率PQ控制策略下的LCL并网仿真研究

微电网恒功率PQ控制&#xff0c;LCL并网仿真最近在搞微电网并网控制时发现个有意思的事——并网逆变器的PQ控制策略和LCL滤波器配合使用时&#xff0c;参数整定能把人绕晕。今天咱们就手撕个MATLAB仿真&#xff0c;看看这个经典组合到底怎么玩。先说说控制逻辑的核心&#xff1…

作者头像 李华
网站建设 2026/6/22 20:29:05

【青岛理工】25年计网期末A卷回忆版

一、简答题43分1.TCP/IP协议体系结构各层的核心功能2.简述CDMA的工作原理&#xff0c;计算过程见PPT/作业对于CDMA原理的理解&#xff0c;这里附上我在学习的时候自己的想法和思考&#xff08;仅供参考&#xff0c;并非教科书式权威的理解&#xff09;&#xff1a;考虑&#xf…

作者头像 李华
网站建设 2026/6/21 15:11:35

51单片机数字电压表

51单片机的数字电压表(数码管显示)–可提供C程序、proteus仿真、原理图、PCB、元件清单 功能说明 主要由51单片机最小系统、四位共阴数码管、ADC0832模数转换芯片组成。 可测DC5V以内的电压&#xff0c;显示精度为0. 001V玩单片机的小伙伴应该都想过自己做个电压表吧&#xff1…

作者头像 李华
网站建设 2026/6/22 8:15:51

新的spring boot3.x和spring-security6.x的流程

以下是Spring Boot 3.x与Spring Security 6.x的核心流程及关键配置要点&#xff1a;依赖配置在pom.xml或build.gradle中添加依赖&#xff1a;<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</a…

作者头像 李华
网站建设 2026/6/20 18:42:55

主动配电网故障恢复的重构与孤岛划分模型 关键词:分布式电源 故障网络重构 主动配电网 孤岛划分...

主动配电网故障恢复的重构与孤岛划分模型 关键词&#xff1a;分布式电源 故障网络重构 主动配电网 孤岛划分 参考文档&#xff1a; [1]《A New Model for Resilient Distribution Systems by Microgrids Formation》 [2]《主动配电网故障恢复的重构与孤岛划分统一模型》 仿真软…

作者头像 李华