MySQL中如何定位慢查询?如果SQL语句执行很慢,如何分析和优化?
1. 定位慢查询
- 开启慢查询日志 :设置
long_query_time阈值(2秒),分析慢查询日志。 - 使用
EXPLAIN分析执行计划:观察是否使用索引、扫描行数、Extra信息。 - 通过
SHOW PROFILE或performance_schema查看SQL各阶段耗时。
2. 分析和优化
- 检查是否命中索引 :
EXPLAIN中key为 NULL 表示未用索引,需添加或优化索引。 - 避免全表扫描:为 WHERE、JOIN、ORDER BY 字段创建合适索引。
- 优化SQL写法 :避免
SELECT *、函数操作索引列、隐式类型转换等。 - 分析数据量:若数据量过大,考虑分库分表或归档历史数据。
- 检查锁竞争 :使用
SHOW PROCESSLIST查看是否有锁等待。