Z
ZHANK
实战技巧

SQL 优化技巧

掌握 SELECT * 陷阱、索引使用、EXPLAIN 分析、慢查询优化

SQL 优化技巧

同样的结果,写法不同性能可能差 100 倍。SQL 优化的核心:减少扫描的数据量、让索引生效。

学完本章你将: 掌握常见优化技巧、EXPLAIN 分析、慢查询定位。


1. 别用 SELECT *

sql
-- ❌ 返回所有列(浪费带宽、不能用覆盖索引)
SELECT * FROM users WHERE id = 1;

-- ✅ 只取需要的列
SELECT name, age FROM users WHERE id = 1;

2. WHERE 条件别包函数

sql
-- ❌ 对列用函数 → 索引失效
SELECT * FROM orders WHERE YEAR(created_at) = 2024;

-- ✅ 用范围条件
SELECT * FROM orders
WHERE created_at >= '2024-01-01' AND created_at < '2025-01-01';

3. 能放 WHERE 就别放 HAVING

WHERE 在分组前利用索引,HAVING 在分组后无索引可用。


4. LIMIT 防大结果集

sql
-- 数据量未知时先加 LIMIT
SELECT * FROM large_table LIMIT 100;

-- 分页优化:大偏移量很慢
-- ❌ LIMIT 1000000, 20  扫描 100 万行只取 20 行
-- ✅ 用 WHERE id > last_id LIMIT 20(游标分页)

5. JOIN 小表驱动大表

sql
-- 用小表的结果去关联大表
-- 确保 JOIN 的 ON 条件列有索引

EXPLAIN 速查

sql
EXPLAIN QUERY PLAN SELECT ...;

关注输出中的关键词:

  • USING INDEX → 用了索引 ✅
  • SCAN TABLE → 全表扫描 ❌(考虑加索引)
  • USING TEMP B-TREE → 用了临时表(效率较低)