Why is there a separate describe and explain statement in MySQL
This is another example of the liberties the MySQL developers have been taking when interpreting the SQL standard (if they ever read it, that is).
DESCRIBE [OUTPUT], with slightly different semantics, is a statement prescribed by the SQL standard, and its purpose is to provide information about the result set (column names and data types) of an executable SQL statement that returns a cursor (result set). This information is inserted to the SQL Descriptor Area (SQLDA) that an application can then access in order to properly process the result set. The standard does not allow for the form DESCRIBE &lt;table name&gt;. This means that the DESCRIBE implementation by MySQL is non-standard.
EXPLAIN is not a part of the SQL standard, but most major DBMSes use it, with slightly different syntax, to generate a statement execution plan in some form. It applies to all executable statements, not just those that return cursors. In that sense the MySQL implementation of EXPLAIN &lt;statement&gt; follows this convention.