Skip to main content

SQL Query Complexity Analyzer

Paste a SQL query to analyze its complexity. Get counts of JOINs, subqueries, CTEs, aggregations, and a complexity score with targeted optimization suggestions.

✓ JOIN / subquery / CTE detection ✓ Complexity scoring ✓ Optimization suggestions ✓ Works with any SQL dialect

Frequently Asked Questions

What makes a SQL query complex?▼

SQL complexity is driven by: number of JOINs (each adds an exponential factor to the query plan), correlated subqueries (run once per row), CTEs with repeated references, large DISTINCT or GROUP BY operations, missing indexes on JOIN/WHERE columns, and HAVING clauses that filter after aggregation. The optimizer cost estimate and actual rows processed are the true measures.

How many JOINs is too many?▼

There is no hard limit, but queries with 5+ JOINs become hard to optimize and understand. The optimizer's search space grows factorially with JOIN count. Queries with 8+ JOINs often hit optimizer heuristics that skip exhaustive plan search. Consider CTEs, materialized views, or denormalization when JOIN counts grow large.

What is a correlated subquery and why is it slow?▼

A correlated subquery references columns from the outer query (e.g., WHERE salary > (SELECT AVG(salary) FROM employees e2 WHERE e2.dept = e1.dept)). It executes once per row of the outer query, making it O(n) instead of O(1). Rewrite with JOIN + aggregation or window functions for dramatic performance gains.

When should I use CTEs vs subqueries?▼

CTEs (WITH clauses) improve readability and allow recursive queries. In PostgreSQL, CTEs before PG12 were optimization fences (preventing push-down). Modern PostgreSQL, MySQL 8+, and SQL Server inline simple CTEs. Use CTEs for: recursive queries, reusing the same subquery multiple times, and improving readability. Use subqueries for simple one-off filters.

What optimization suggestions apply to most complex queries?▼

Common optimizations: (1) Add indexes on JOIN and WHERE columns, (2) Rewrite correlated subqueries as JOINs, (3) Use EXPLAIN ANALYZE to find seq scans, (4) Break complex queries into CTEs for the optimizer, (5) Use covering indexes for frequently queried column combinations, (6) Avoid SELECT * — name columns explicitly, (7) Use LIMIT early in subqueries.

Share this tool: X / Twitter LinkedIn
✓ 60,000+ developers use DevPlaybook ★★★★★ 4.8 / 5 on Gumroad ✓ MIT licensed · Instant download ✓ No login required

Related Products

on Gumroad

You Might Also Need

More Free Tools

Enjoying this tool? Get more like it.

Weekly developer tool guides, productivity playbooks & AI tricks. Free. No spam.

DevPlaybook Pro 7 days free

Unlock AI-Powered Dev Tools

  • ⚡ AI Code Review, Doc Generator & SQL Builder
  • ⚡ All premium templates & early access
  • ⚡ Member discounts on Gumroad products
Start Free Trial →

$9/mo after trial · Cancel anytime

Want the full toolkit?

Get DevPlaybook Pro

Every template, guide, boilerplate, and automation script in one bundle. 13 premium products — grab them all at once and save big.

$79
$241 separately Save $162 (67% off)
Get DevPlaybook Pro — $79 →

MIT licensed · Instant download · No subscription

See what's included → Browse all deals →