数据库

MySQL慢查询定位实验:一条SQL从2s到200ms的优化

2024-05-22 | MySQL 8.0 + EXPLAIN分析
通过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 (扫描行数) 优化步骤
  1. 添加复合索引:`ALTER TABLE experiment_reports ADD INDEX idx_user_type_time (user_id, report_type, create_time)`
  2. 优化GROUP BY语句:使用覆盖索引避免回表
  3. 分页优化:将`LIMIT 1000`改为基于游标分页
-- 优化后查询
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% 索引优化建议
  1. 为经常用于查询条件和排序的字段添加索引
  2. 使用EXPLAIN命令分析查询执行计划
  3. 避免在索引列上使用函数或计算
  4. 考虑复合索引的顺序:最左前缀原则
分享至:

相关学习推荐

性能优化

PHP接口响应优化实验:从500ms到80ms

2024-04-15
查看详情
前端开发

自定义Layui表单验证:实现「实验名称」格式校验

2024-07-15
查看详情