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)
作用:查看查询各阶段的耗时。
步骤:
- 启用Profiling:
SET SESSION profiling = 1; - 执行查询:SELECT * FROM users WHERE age > 30;
- 查看所有Profile记录:SHOW PROFILES;
- 查看具体查询的详细耗时:SHOW PROFILE FOR QUERY 1; -- 1为查询ID。
输出:显示starting、checking permissions、Sending data等阶段的耗时
使用Performance Schema(高级监控)
作用:深度监控服务器运行时行为,包括SQL执行细节。
步骤:
- 确保启用Performance Schema(默认开启):
SHOW VARIABLES LIKE 'performance_schema'; -- 确认值为ON - 执行查询后,查看历史记录:
SELECT * FROM performance_schema.events_statements_history WHERE SQL_TEXT LIKE '%SELECT * FROM users%';
关键字段:DURATION(耗时)、ROWS_EXAMINED(扫描行数)

浙公网安备 33010602011771号