优化慢查询之前,先确认问题发生在哪个层次。应用连接池等待、网络延迟和锁等待都可能被误认为 SQL 执行慢。
收集真实样本
保留归一化 SQL、执行次数、平均和尾部延迟、扫描行数。对具体慢样本运行 EXPLAIN ANALYZE,比较估算行数与实际行数。如果差异很大,统计信息或数据倾斜可能影响了优化器选择。
常见原因
- 缺少与过滤和排序匹配的索引。
- 一次读取过多行或过宽字段。
- 隐式类型转换导致索引失效。
- 长事务持锁,引发后续请求排队。
- 深分页反复扫描并丢弃大量记录。
优化后必须在接近生产的数据量上对比,并观察写入成本和其他查询是否退化。最快的单条 SQL 不一定带来最健康的整体系统。