数据库

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

    相关学习推荐

    性能优化

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

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

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

    2024-07-15
    查看详情