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→ 用了临时表(效率较低)