mysql - 如何查看mysql存储过程的执行计划?

标签 mysql sql procedure

Java使用JDBC执行存储过程,但是速度慢,所以想检查数据库存储过程的执行计划,你怎么看?有几百行SQL存储过程,数据库是Mysql,我知道要检查select语句执行计划是要用explain的,但是存储过程怎么可以呢?

最佳答案

你可以使用mysql optimizer tracer如果您至少有 mysql v5.6.3。

基本用法:

SET optimizer_trace="enabled=on";
SELECT ...; # your query here
SELECT * FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
# possibly more queries...
# When done with tracing, disable it:
SET optimizer_trace="enabled=off";

它可以追踪following queries :

SELECT; INSERT or REPLACE (with VALUES or SELECT); UPDATE/DELETE and their multi-table variants; all the previous ones prefixed by EXPLAIN; SET (unless it manipulates the optimizer_trace system variable); DO; DECLARE/CASE/IF/RETURN (stored routines language elements); CALL. If one of those statements is prepared and executed in separate steps, preparation and execution are separately traced.

关于mysql - 如何查看mysql存储过程的执行计划?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37458477/

相关文章:

mysql - 计数子类别和主类别基本项目

python - MySql:它会死锁到许多插入 - Django 吗?

mysql - 如何使用一系列日期和每月计数创建查询?

sql - 在 sql select 查询中使用分隔符重新排列字符串值

java - 从 Java 程序找出 IBMi DB2400 表的约束的最佳方法是什么?

MySQL 程序出错

MySQL 执行 utc_date + 1 而不是使用 date_add(utc_date, Interval 1 day) 的含义

linux程序没有回答。我怎么知道哪个例程导致了卡住?

postgresql - 如何调用 TimescaleDB 中的过程?

MySql:错误 #1242 使用从另一个表获取的数据更新列