myflames — MySQL Query Plan Visualizer
Visualize EXPLAIN ANALYZE FORMAT=JSON output as interactive SVG charts —
and project the same analysis for AI agents and CI. One parser, many outputs, zero external dependencies.
View on GitHub →
Documentation
For AI agents & CI — one analysis, many projections
Raw EXPLAIN ANALYZE FORMAT=JSON is verbose: an LLM burns tokens
parsing it before it can reason, and an SVG is invisible to an agent.
myflames parses and analyzes a plan once, then projects it into a compact,
source-grounded form an agent or pipeline can consume directly.
myflames digest explain.json— a compact, LLM-ready digest (summary, warnings, fixes, plan skeleton) to paste into a model instead of the raw plan.myflames digest explain.json --cost— measures the token + $ saving vs pasting the raw plan (typically ~4× fewer tokens). Exact counts via--tokenizer claude(your key) or--tokenizer gpt(keyless tiktoken).
myflames advise explain.json --json— ranked warnings + suggestions, each with a confidence.myflames check explain.json --fail-on full_scan,filesort— exits 1 if a trigger matches; a CI / pre-commit / agent-loop gate (0clean,1tripped,2bad input).
Let an agent (Claude Code, Cursor, …) call myflames directly.
pip install 'myflames[mcp]'
claude mcp add myflames -- myflames-mcp
Tools: analyze_plan, digest_plan, compare_plans, explain_optimizer_switch, explain_query.
- Every
--outputwrites a JSON sidecar (schema v1.3) beside the HTML/SVG, so tools and agents never parse the picture. myflames diff before.json after.json --jsonemits a structuredcompare-1.0delta.
Learn the algorithms — myflames teach
Interactive, offline-first HTML lessons that animate MySQL 8.4 and
MariaDB 11.x internals with correct cost models. Every lesson has
in-page sliders — no CLI flags, no re-running. Generated with
myflames teach <lesson> -o <file>.html.
- B+tree lookup — clustered PK vs covering vs non-covering secondary, 16 KiB page fan-out
- Midpoint-insertion LRU — why MySQL's buffer pool survives full-scan pollution
- Block Nested Loop — MariaDB 11.x default (MySQL removed it in 8.0.20)
- Hash join — build, probe, grace-hash spill on
join_buffer_sizeoverflow - BNL vs hash side-by-side — shared sliders, live cost comparison
- Filesort — sort_buffer_size, sorted runs, k-way merge
- Temporary tables — MEMORY to on-disk InnoDB conversion
- Index Condition Pushdown — filter inside InnoDB, skip unnecessary row fetches
- Index Merge — union, intersection, sort-union of row-ID sets
Flame graph — full execution hierarchy (default view)
Open full page (interactive) →Bar chart — slowest operations first
Open full page (interactive) →Treemap — area proportional to total time
Open full page (interactive) →Diagram — Visual Explain-style flow
Open full page (interactive) →Execution tree — collapsible plan tree
Open full page (interactive) →Query Analysis panel — scenario demos
Each view includes a Query Analysis panel: optimizer features detected, warnings, and concrete tuning suggestions.
Complex queries — real-world patterns
Non-trivial query shapes captured live against MySQL 8.4: multi-CTE with window functions, correlated subqueries (the N+1 anti-pattern), and recursive CTEs for tree traversal. Each demo pipes through the advisor + collector pipeline and emits a JSON sidecar next to the HTML so AI agents and external tools can consume the analysis without parsing the SVG.
Top-3 earners per department using ROW_NUMBER() OVER (PARTITION BY …).
N+1 anti-pattern: per-row scalar subquery to look up max/count.
Org-chart traversal — anchor + recursive JOIN until depth limit.
Optimizer switches — one flag per demo
Plans captured live with a specific @@optimizer_switch
feature active, so you can see what each switch looks like in a real
EXPLAIN plan and read the one-line impact the advisor emits.
Live connection mode — connect + explain + advise
These demos came from running myflames with real connection flags
(-h host -P port -u user -p -e "SELECT …") against
MySQL 8.4 and MariaDB 11.4. Each one embeds the collected schema,
stats, and session variables, plus environment-specific tuning
suggestions generated by the advisor. All 3 outputs (.svg,
.html, .json) are produced by a single CLI
invocation.
HTML report — self-contained shareable report
Generate with myflames --output report.html explain.json. Includes embedded chart, analysis sidebar, and export buttons.
Before vs After comparison
Generate with myflames compare before.json after.json. Shows time deltas, operator changes, and a "what got better / worse" summary.
Repository and README • Getting Started • CLI Reference • Architecture