一、EXPLAIN 是什么
EXPLAIN 是 SQL 查询的“体检工具”,能告诉我们:
· 数据库执行查询的顺序
· 是否走了索引
· 扫描了多少数据行
· 有没有全表扫描或临时表
二、EXPLAIN 输出重点字段
table:被访问的表
type:访问方式,性能好坏关键指标
rows:预计扫描的行数,越小越好
key:实际使用的索引
Extra:是否排序/临时表等提示
type 值性能从差到好:ALL > index > range > ref > eq_ref > const
如果是ALL,几乎就是全表扫描,要优化!
三、常见优化建议(写查询时可对照)
WHERE 子句:为筛选字段添加索引(如:订单号、客户ID)
JOIN 联接:JOIN 的字段要建立索引,避免全表比对
SELECT 列:避免 SELECT *,只查需要的列
计数优化:COUNT(*) 可用索引覆盖或缓存方案优化
ORDER BY:尽量使用索引字段排序,避免临时表 + filesort
LIMIT 分页:LIMIT 1000 OFFSET 1000 慎用,建议使用主键过滤或子查询代替
四、创建索引语法备忘
单字段索引:
CREATE INDEX idx_customer_id ON Customers(cust_id);
联合索引(最左前缀原则)
CREATE INDEX idx_orderitems_orderprod ON OrderItems(order_num, prod_id);
有顺序要求的联合索引,一定要按最左字段过滤才能生效。
五、优化流程建议
1 写出原始查询
2 用 EXPLAIN 检查执行计划
3 判断是否有全表扫描(type = ALL)
4 发现未使用索引 → 创建或调整索引
5 再次 EXPLAIN 验证优化效果
推荐使用场景
1 面试前冲刺:提升 SQL 技术含金量
2 自学巩固:把查询写“对”也写“快”
3 实战数据分析:处理上万行数据不卡顿
数据分析,一起努力。









网友评论