The EXPLAIN
statement can be used
either as a way to obtain information about how MySQL executes a
SELECT
statement or as a synonym
for DESCRIBE
:
When you precede a
SELECT
statement with the keywordEXPLAIN
, MySQL displays information from the optimizer about the query execution plan. That is, MySQL explains how it would process theSELECT
, including information about how tables are joined and in which order.EXPLAIN EXTENDED
can be used to provide additional information.For information on how to use
EXPLAIN
andEXPLAIN EXTENDED
to obtain query execution plan information, see Section 7.8.1, “Optimizing Queries withEXPLAIN
”.EXPLAIN PARTITIONS
is useful only when examining queries involving partitioned tables. For details, see Section 18.3.4, “Obtaining Information About Partitions”.EXPLAIN
is synonymous withtbl_name
DESCRIBE
ortbl_name
SHOW COLUMNS FROM
.tbl_name
For a description of the
DESCRIBE
andSHOW COLUMNS
statements, see Section 12.8.1, “DESCRIBE
Syntax”, and Section 12.4.5.6, “SHOW COLUMNS
Syntax”.
With the help of EXPLAIN
, you can
see where you should add indexes to tables to get a faster
SELECT
that uses indexes to find
rows. You can also use EXPLAIN
to
check whether the optimizer joins the tables in an optimal
order. To give a hint to the optimizer to use a join order
corresponding to the order in which the tables are named in the
SELECT
statement, begin the
statement with SELECT STRAIGHT_JOIN
rather
than just SELECT
. (See
Section 12.2.9, “SELECT
Syntax”.)
If you have a problem with indexes not being used when you
believe that they should be, run ANALYZE
TABLE
to update table statistics such as cardinality
of keys, that can affect the choices the optimizer makes. See
Section 12.4.2.1, “ANALYZE TABLE
Syntax”.