SQL Practice Logo

SQLPractice Online

Execution Plans & EXPLAIN: Functions

Module: Query Optimization & Performance

**PostgreSQL Advanced EXPLAIN Options:**

```sql

-- Complete analysis with all metrics

EXPLAIN (ANALYZE, BUFFERS, VERBOSE, TIMING, COSTS, SETTINGS)

SELECT * FROM orders WHERE customer_id = 123;

-- Options explained:

-- ANALYZE: Execute query and show actual times

-- BUFFERS: Show buffer cache hits/misses

-- VERBOSE: Show output column list

-- TIMING: Show actual timing (can add overhead)

-- COSTS: Show cost estimates (default ON)

-- SETTINGS: Show non-default settings affecting plan

-- Format options

EXPLAIN (ANALYZE, FORMAT JSON) SELECT ...; -- Machine-readable

EXPLAIN (ANALYZE, FORMAT YAML) SELECT ...; -- Structured

EXPLAIN (ANALYZE, FORMAT XML) SELECT ...; -- XML format

-- Parallel execution analysis

EXPLAIN (ANALYZE, BUFFERS)

SELECT COUNT(*) FROM large_table

WHERE created_at >= '2024-01-01';

-- Look for "Workers Planned" and "Workers Launched"

-- Cost parameter tuning

SET seq_page_cost = 1.0; -- Sequential I/O cost

SET random_page_cost = 1.1; -- Random I/O cost (SSD)

SET cpu_tuple_cost = 0.01; -- Per-row processing

SET cpu_operator_cost = 0.0025; -- Per-operation cost

SET effective_cache_size = '8GB'; -- Available cache

SET work_mem = '256MB'; -- Sort/hash memory

```

**MySQL Advanced EXPLAIN:**

```sql

-- Detailed JSON format

EXPLAIN FORMAT=JSON

SELECT * FROM orders WHERE customer_id = 123;

-- Traditional format with extended info

EXPLAIN EXTENDED

SELECT * FROM orders WHERE customer_id = 123;

SHOW WARNINGS; -- Shows optimizer notes and rewritten query

-- Analyze actual execution (MySQL 8.0+)

EXPLAIN ANALYZE