什么是慢查询_mysql慢sql概念

慢查询指执行时间超过long_query_time阈值的SQL语句,需slow_query_log开启才记录,包含完整SQL、耗时、锁等待等字段,不区分语句类型;默认10秒不适用现代业务,通常设为0.5~2秒。

慢查询指的是执行时间超过预设阈值的 SQL 语句。这个阈值由 MySQL 的 long_query_time 参数控制,默认是 10 秒,但生产环境中通常设为 1~2 秒——只要查询耗时超过该值,就会被记录进慢查询日志。

慢查询的核心特征

它不是“看起来慢”,而是有明确判定标准的可量化行为:

  • 触发条件严格依赖 实际执行耗时,与返回行数、数据量大小无直接关系(哪怕只查 1 行,若扫描全表+没索引,也可能超时)
  • 必须在 slow_query_log = ON 开启状态下才记录,且日志默认关闭,需手动启用
  • 记录内容包含完整 SQL 文本、执行时间、锁等待时间、扫描行数、返回行数等关键诊断字段
  • 不区分 SELECT/UPDATE/DELETE/INSERT —— 只要执行时间超标,都算慢查询

为什么 10 秒默认值在现实中基本不用

现代业务系统对响应延迟敏感,用户等待超过 1 秒就可能流失。所以:

  • 电商搜索、支付确认、实时消息等场景常设为 0.5~1 秒
  • 后台报表类任务可放宽至 5~10 秒,但仍建议单独归类,不混入在线服务慢日志
  • 阈值过大会漏掉大量中等耗时但高频的低效查询,它们累积起来对性能伤害更大

慢查询 ≠ SQL 写得差,但它是优化入口

一条语句变慢,可能是多种因素叠加的结果:

  • 索引失效(如对字段做函数操作:WHERE YEAR(create_time) = 2025
  • 统计信息过期,优化器选错执行计划
  • 大表 JOIN 未加驱动表提示或缺少关联字段索引
  • 高并发下锁等待加剧,实际执行时间被动拉长
  • 磁盘 I/O 瓶颈(尤其机械盘 + 大量临时表排序)

识别慢查询只是第一步,后续要用 EXPLAIN 看执行计划、用 pt-query-digest 聚类分析、结合 show profile 或 performance_schema 定位耗时环节。不复杂但容易忽略。