数据库
MySQL慢查询定位实验:一条SQL从2s到200ms的优化
通过EXPLAIN命令分析查询执行计划,发现索引缺失导致全表扫描:
添加复合索引:`ALTER TABLE experiment_reports ADD INDEX idx_user_type_time (user_id, report_type, create_time)`
优化GROUP BY语句:使用覆盖索引避免回表
分页优化:将`LIMIT 1000`改为基于游标分页
为经常用于查询条件和排序的字段添加索引
使用EXPLAIN命令分析查询执行计划
避免在索引列上使用函数或计算
考虑复合索引的顺序:最左前缀原则
EXPLAIN SELECT user_id, COUNT(*) as count FROM experiment_reports GROUP BY user_id ORDER BY count DESC;执行结果显示: - type=ALL (全表扫描) - key=null (未使用索引) - rows=125832 (扫描行数) 优化步骤
-- 优化后查询 EXPLAIN SELECT user_id, COUNT(*) as count FROM experiment_reports USE INDEX (idx_user_type_time) GROUP BY user_id ORDER BY count DESC;优化效果 - 查询时间:从2000ms降至200ms - 扫描行数:从125,832降至842 - CPU占用率:下降40% 索引优化建议
分享至: