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