MySQL 执行计划explain for connection是个非常有用的功能,我们可以通过这个命令查看正在执行的SQL的执行计划,对于检查一些执行时间长的SQL非常有用,这个命令的语法是:
EXPLAIN [options] FOR CONNECTION connection_id;
connection_id是需要被解释的连接的ID。这个id可以通过show processlist或者在连接里面输入SELECT CONNECTION_ID()来查看。
但这个功能却有两个常见的坑。
一个是不能检查没有执行DML语句的连接,会有下面的提示。
ERROR 3012 (HY000): EXPLAIN FOR CONNECTION command is supported only for SELECT/UPDATE/INSERT/DELETE/REPLACE
特别注意是不能检查自身的链接。
另外一个坑是只能检查正在执行的SQL,即使的刚刚执行过的SQL也检查不了。仔细看下面的图就会明白:
注意时间点。在mysql的提示符里面加上当前时间,可以用:prompt \r:\m:\s\P>_ 。
EXPLAIN format=json FOR CONNECTION 可以得到更详细的信息。