MySQL里面怎么看一条sql的执行过程

使用 EXPLAIN 查看执行计划

作用:分析查询优化器选择的执行计划,包括索引使用、表连接顺序等。
语法EXPLAIN SELECT * FROM 表名 WHERE 条件;
输出关键字段:
type:访问类型(如ALL全表扫描、INDEX索引扫描、ref非唯一索引等)。
key:实际使用的索引。
rows:预估扫描的行数。
Extra:额外信息(如Using where、Using index等)。

使用 EXPLAIN ANALYZE(MySQL 8.0.18+)

作用:提供实际执行时的详细统计信息(如耗时、循环次数)
语法EXPLAIN ANALYZE SELECT * FROM 表名 WHERE 条件;
输出:逐行展示执行过程,包含实际耗时(如actual time=0.1..2.5)。

使用性能分析(Profiling)

作用:查看查询各阶段的耗时。
步骤

  1. 启用ProfilingSET SESSION profiling = 1;
  2. 执行查询:SELECT * FROM users WHERE age > 30;
  3. 查看所有Profile记录:SHOW PROFILES;
  4. 查看具体查询的详细耗时:SHOW PROFILE FOR QUERY 1; -- 1为查询ID。

输出:显示starting、checking permissions、Sending data等阶段的耗时

使用Performance Schema(高级监控)

作用:深度监控服务器运行时行为,包括SQL执行细节。
步骤

  1. 确保启用Performance Schema(默认开启):SHOW VARIABLES LIKE 'performance_schema'; -- 确认值为ON
  2. 执行查询后,查看历史记录:
    SELECT * FROM performance_schema.events_statements_history WHERE SQL_TEXT LIKE '%SELECT * FROM users%';

关键字段:DURATION(耗时)、ROWS_EXAMINED(扫描行数)

posted @ 2025-04-03 11:31  蒟蒻00  阅读(150)  评论(0)    收藏  举报