Skip to main content
Documents
Share
LinkedIn
Facebook
Twitter
Copy
ClausesStatementsKeywordsExpressionsFunctionsIndexesPerformance Optimization

MySQL EXPLAIN Keyword

The `EXPLAIN` keyword in MySQL is used to obtain information about how a `SELECT`, `INSERT`, `UPDATE`, or `DELETE` statement is executed. It provides insights into the query execution plan, helping developers optimize database queries.

Usage

The `EXPLAIN` keyword is primarily used to diagnose and optimize SQL queries by showing details like table scans and index usage. It is placed before a query to reveal the execution strategy MySQL will use.

EXPLAIN SELECT column1, column2, ...
FROM table_name
[WHERE condition];

In this syntax, `EXPLAIN` precedes a SQL query to display details about how MySQL plans to execute it. For non-`SELECT` queries, `EXPLAIN FORMAT=JSON` is recommended to provide detailed insights.

Examples

1. Basic EXPLAIN on a SELECT Query

EXPLAIN SELECT * FROM orders;

This example provides execution details, such as the type of join or index usage, for retrieving all columns from the `orders` table.

2. EXPLAIN with WHERE Clause

EXPLAIN SELECT first_name FROM employees WHERE department_id = 5;

Here, `EXPLAIN` helps identify how the query performance is influenced by the `WHERE` clause, such as index utilization for filtering.

3. EXPLAIN with JOIN

EXPLAIN SELECT o.order_id, c.customer_name
FROM orders o
JOIN customers c ON o.customer_id = c.customer_id
WHERE c.city = 'New York';

This example analyzes a `JOIN` operation, providing insights into how tables are linked and filtered by the `WHERE` condition.

4. EXPLAIN with INSERT, UPDATE, or DELETE

For non-`SELECT` statements, use `EXPLAIN FORMAT=JSON` for detailed insights:

EXPLAIN FORMAT=JSON INSERT INTO archive SELECT * FROM orders WHERE order_date < '2023-01-01';
EXPLAIN FORMAT=JSON UPDATE employees SET salary = salary * 1.1 WHERE department_id = 5;
EXPLAIN FORMAT=JSON DELETE FROM orders WHERE status = 'canceled';

Common EXPLAIN Output Columns

  • id: The identifier of the SELECT within a query.
  • select_type: The type of SELECT, such as SIMPLE or PRIMARY.
  • table: The name of the table to which the row of output refers.
  • type: The join type.
  • possible_keys: The possible indexes MySQL can choose from.
  • key: The actual index MySQL decided to use.
  • key_len: The length of the key used.
  • ref: The columns or constants compared to the index.
  • rows: The estimate of rows examined.
  • Extra: Additional information.

Tips and Best Practices

  • Regularly check complex queries. Use `EXPLAIN` to analyze and optimize complex queries for better performance.
  • Combine with `ANALYZE`. Use `ANALYZE TABLE` to update index statistics for more accurate `EXPLAIN` results.
  • Understand output columns. Familiarize yourself with the `EXPLAIN` output columns to interpret performance insights effectively.
  • Optimize based on findings. Adjust indexes, rewrite queries, or redesign schemas using `EXPLAIN` insights for efficiency.
  • Use `EXPLAIN EXTENDED` or `EXPLAIN FORMAT=JSON` for more detailed analysis to tailor optimizations to specific use cases.