Database.Middle.What is query execution plan (EXPLAIN)?

Understanding the query execution plan (via EXPLAIN) is key to becoming a query performance master. Let’s break it down step by step.


🧠 What Is a Query Execution Plan?

A query execution plan is a step-by-step blueprint of how the database will execute (or has executed) your SQL query.

You can ask the database to show you its plan using the EXPLAIN command.


🔍 Why Use EXPLAIN?

  • To understand how your query behaves
  • To find performance problems
  • To see if indexes are used
  • To check row estimates vs actual results

✅ Basic Example

EXPLAIN SELECT * FROM users WHERE email = 'stanley@example.com';

This will show:

  • Whether the query does a sequential scan (bad for big tables)
  • Or an index scan (faster!)
  • How many rows are expected
  • The cost of the operation (a unitless estimate)

🧠 Key Terms You’ll See in EXPLAIN

TermMeaning
Seq ScanFull table scan (slow for large tables)
Index ScanUses an index to locate matching rows
Index Only ScanUses only index — doesn’t touch table (very fast)
Nested LoopJoins one row at a time (fast for small sets)
Hash JoinJoins using a hash table (good for large joins)
CostEstimated cost to run the step (planner’s metric)
RowsEstimated number of rows at that step
WidthAverage size of each row in bytes

✅ More Powerful: EXPLAIN ANALYZE

EXPLAIN ANALYZE SELECT * FROM users WHERE email = 'stanley@example.com';
  • Executes the query
  • Shows actual time taken
  • Shows actual row counts
  • Helps you see misestimates or performance issues

🧠 Example Output (Simplified)

Seq Scan on users  (cost=0.00..35.50 rows=1 width=48)
  Filter: (email = 'stanley@example.com')

🟥 This means:

  • The database is scanning the whole table to find the email — it’s not using an index, which is slow for big tables.

✅ Better:

Index Scan using idx_users_email on users
  Index Cond: (email = 'stanley@example.com')

This means:

  • The database used your index — much faster!

💡 When to Use EXPLAIN

SituationUse EXPLAIN?
Query is slow✅ Yes
You want to tune a query✅ Yes
Adding or testing an index✅ Yes
Optimizing joins✅ Yes
This entry was posted in Без рубрики. Bookmark the permalink.