← AI 百科

慢查询(Slow SQL)

报错库 · 报错 / 数据库 / 性能
一句话:某条数据库查询执行时间过长,拖慢整个功能响应速度,常见原因是缺索引、查询条件不合理、或者一次查询了过多数据。

它是什么

慢查询指执行时间明显超出预期的SQL语句,是导致页面加载慢、接口超时的常见根源。大部分数据库支持记录慢查询日志,可以用来定位是哪条SQL拖慢了系统。

适合干什么

  • 页面/接口响应慢需要定位原因
  • 系统随着数据量增长逐渐变慢

不适合干什么

  • 数据库根本连不上的情况(那是database-connection-failed,不是查询慢的问题)

普通人怎么用

开启数据库的慢查询日志功能,找到耗时最长的几条SQL,用EXPLAIN命令分析有没有用上索引,缺索引是最常见的原因。

进阶用户怎么用

常见优化方向:给合适字段加索引、避免SELECT *只查需要的字段、避免在WHERE条件里对索引字段做函数运算、大数据量分页查询用游标而不是OFFSET、复杂统计考虑用汇总表代替实时计算。

常见误区

  • 以为服务器性能不够是慢查询的主因,实际大部分慢查询问题是SQL写法或索引缺失导致的,加机器配置往往治标不治本
  • 只优化了查询本身,没考虑随着数据量增长同样的SQL会越来越慢,需要预判数据增长做提前优化

和相似工具的区别

  • 和 database-timeout 的关系:慢查询是原因,超时是结果,优化慢查询往往能直接解决超时问题

入门步骤

  • 开启慢查询日志
  • 找出耗时最长的SQL
  • 用EXPLAIN分析并针对性优化(通常是加索引)