High Performance MySQL, 2nd Edition
by Jeremy D. Zawodny, Derek J. Balling, Baron Schwartz, Peter Zaitsev, Arjen Lentz, Vadim Tkachenko
Appendix B. Using EXPLAIN
This appendix shows you how to invoke EXPLAIN to get information about the query
execution plan, and how to interpret the output. The EXPLAIN
command is the main way to find out how the query optimizer decides to
execute queries. This feature has many limitations and doesn’t always tell
the truth, but its output is the best information available, and it’s
worth studying, so you can make an educated guess about how your queries
are executed.
Invoking EXPLAIN
To use EXPLAIN, simply add the
word EXPLAIN just before the SELECT keyword in your query. MySQL will set a
flag on the query. When it executes the query, the flag causes it to
return information about each step in the execution plan, instead of
executing it. It returns one or more rows, which show each part of the
execution plan and the order of execution.
Here’s the simplest possible EXPLAIN result:
mysql> EXPLAIN SELECT 1\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: NULL
type: NULL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: NULL
Extra: No tables usedThere’s one row in the output per table in the query. If the query
joins two tables, there will be two rows of output. An aliased table
counts as a separate table, so if you join a table to itself, there will
be two rows in the output. The meaning of “table” is fairly broad here:
it can mean a subquery, a UNION
result, and so on. You’ll see later why this is so.
There are two important variations ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access