SQL OPTIMIZATION · SQL 优化

一条慢 SQL,拖垮整个系统

数据库性能问题,90% 源于 SQL 写得不对。本讲从慢 SQL 定位、执行计划分析到索引优化与 SQL 改写,讲透一套系统化的优化方法论,帮你把每条查询都压到毫秒级。

100x合理索引提升空间
EXPLAIN执行计划分析
慢查询日志定位源头
毫秒级优化目标
PAIN POINTS

SQL 慢,都是这些原因

🐌

全表扫描,数据一多就卡

查询条件没用上索引,数据从几万涨到几百万,页面直接卡死。

🌀

索引失效,建了等于没建

函数运算、隐式转换、最左前缀破坏,索引明明建了却不生效。

🪢

深分页与 N+1 查询

LIMIT 十万偏移慢如蜗牛,循环查库 N+1 次,数据库被白白打爆。

METHOD

SQL 优化四步法

🔎

定位慢 SQL

开启慢查询日志 + 性能监控,找到最耗时的 Top SQL。

🧠

分析执行计划

EXPLAIN 看 type/key/rows,判断是否走索引、扫描多少行。

🔧

索引与改写

按查询建联合索引、覆盖索引,改写 SQL 消除低效写法。

📈

验证与固化

对比优化前后耗时,把规范固化为团队评审标准。

TIPS

高频优化技巧

USE CASES

优化带来什么改变

🛒

电商查询

商品列表、订单查询从秒级到毫秒级,用户下单不再卡顿。

📊

报表统计

百万级数据聚合提速数十倍,运营看数不再等半天。

🏢

后台系统

列表、筛选、导出响应如飞,后台操作体验质变。

🌐

高并发接口

数据库压力下降,系统可承载的并发显著提升。

数据库天天慢查询

我们提供慢 SQL 诊断与优化服务,出报告、给方案、验证效果。

FAQ

SQL 优化高频问答

重点看 type(const/ref/range/index/ALL,ALL 是全表扫描要警惕)、key(实际用到的索引)、rows(预估扫描行数)。目标是 type 达到 ref/range、rows 尽量小。
查索引是否真的被用上(EXPLAIN 的 key),索引并非越多越好(拖慢写入);检查是否存在隐式转换、函数、最左前缀破坏导致索引失效。
用"上一页最大 ID + WHERE id > ? LIMIT n"的游标方式替代 LIMIT 大偏移;或用覆盖索引先取主键再回表。业务上常用"加载更多"替代翻页。
大表 COUNT(*) 无法避免扫描。用 Redis 维护计数、或维护统计表异步更新、或用近似值展示(如总数不要求精确)。精确实时计数成本很高。
开启 slow_query_log 并设置阈值(如 1s),定期分析慢日志;配合性能监控(如 PMA、性能洞察)自动告警 Top SQL。
会。每个索引都要在写入时维护。读写要平衡:查询收益大于写入成本才建索引,避免冗余索引与无效索引,定期用工具清理。

让每条 SQL 都快起来

编程新知提供数据库性能诊断与优化服务,从慢 SQL 到架构,全面提速。