慢 SQL 排查不要只盯索引

遇到慢 SQL,很多人的第一反应是加索引。索引当然重要,但慢查询不一定只是索引问题。查询目标不清、返回字段太多、分页方式不合适、业务调用过于频繁,都可能让 SQL 变慢。

先看查询目的

排查前先问这个 SQL 想解决什么问题。是列表查询、详情查询、统计查询,还是后台导出。不同目标对返回字段、排序方式、实时性和数据范围的要求不一样。

如果一个列表页只展示少量字段,却查询了完整大对象,问题可能不在索引,而在接口设计过重。

再看数据范围

慢 SQL 经常和数据范围有关。没有时间条件、没有状态条件、模糊搜索范围过大、排序字段不合适,都会让数据库做很多不必要的工作。

排查时要结合执行计划、筛选条件、排序字段和返回行数一起看。只看 SQL 文本,很容易误判。

最后看调用方式

有些 SQL 单次执行并不慢,但被循环调用后整体就慢了。典型问题是列表查询后逐条查详情,或者每条数据再查关联信息。

这种情况更应该优化调用方式,比如批量查询、提前聚合、减少不必要字段,而不是盲目给每个查询都加索引。

复盘

慢 SQL 排查要从业务目的出发,再到数据范围、执行计划和调用方式。索引是重要工具,但不是唯一答案。真正的优化是让数据库少做无效工作。

参考