SQL 优化是后端开发面试中最高频的问题之一。这篇从实战出发,讲清楚怎么定位慢 SQL、怎么优化、怎么看执行计划。
一、定位慢 SQL
-- 开启慢查询日志SETGLOBALslow_query_log=ON;SETGLOBALlong_query_time=1;-- 超过1秒SETGLOBALlog_queries_not_using_indexes=ON;-- 查看慢日志mysqldumpslow-s t-t10/var/lib/mysql/slow.log二、Explain 执行计划
EXPLAINSELECT*FROMseckill_orderWHEREstatus=0;| 列名 | 说明 | 好/坏 |
|---|---|---|
| type | ALL=全表,const=主键 | ALL ❌ const ✅ |
| key | 使用的索引 | NULL ❌ |
| rows | 扫描行数 | 越小越好 |
| Extra | Using filesort=没走排序索引 | ❌ |
三、索引优化
-- 单列索引ALTERTABLEseckill_orderADDINDEXidx_status(status);ALTERTABLEseckill_orderADDINDEXidx_user_id(user_id);-- 联合索引ALTERTABLEseckill_orderADDINDEXidx_user_status(user_id,status);-- 覆盖索引查询SELECTuser_id,statusFROMseckill_orderWHEREuser_id=1001;-- 上面的查询只从索引取数据,不需要回表💡 觉得有用的话,点赞 + 关注【张老师技术栈】吧!