Query Analysis in PostgreSQL

From the PostgreSQL Advanced Features cheat sheet ยท Indexes & Performance ยท verified Jul 2026

Query Analysis

Analyze and optimize query performance

sql
-- Explain query plan
EXPLAIN SELECT * FROM users WHERE email = 'john@example.com';

-- Explain with execution stats
EXPLAIN ANALYZE SELECT * FROM orders WHERE user_id = 123;

-- Verbose explain with buffers
EXPLAIN (ANALYZE, BUFFERS, VERBOSE)
SELECT * FROM large_table WHERE status = 'active';

-- Check index usage
SELECT 
  schemaname,
  tablename,
  indexname,
  idx_scan,
  idx_tup_read,
  idx_tup_fetch
FROM pg_stat_user_indexes
ORDER BY idx_scan;

-- DETAILED_TAB:
-- Find missing indexes
SELECT
  schemaname,
  tablename,
  attname,
  n_distinct,
  correlation
FROM pg_stats
WHERE schemaname = 'public'
  AND n_distinct > 100
  AND correlation < 0.1
ORDER BY n_distinct DESC;

-- Query cache hit ratio
SELECT 
  sum(heap_blks_hit) / (sum(heap_blks_hit) + sum(heap_blks_read)) as cache_hit_ratio
FROM pg_statio_user_tables;

-- Slow query log (pg_stat_statements)
SELECT 
  query,
  mean_exec_time,
  calls,
  total_exec_time
FROM pg_stat_statements
ORDER BY mean_exec_time DESC
LIMIT 10;
๐Ÿ’ก EXPLAIN ANALYZE shows actual execution times
๐Ÿ“Œ Look for Seq Scan on large tables
โšก Cache hit ratio should be > 95%
๐ŸŸข Essential for performance tuning
๐Ÿ”— Related: pg_stat_statements extension
performanceanalysis

Continue with PostgreSQL Advanced Features

Save the full cheat sheet or work through every related task.

More PostgreSQL tasks

Back to the full PostgreSQL Advanced Features cheat sheet