Skip to main content
AI/MLjeremylongshore

flux-query

Optimize slow database queries — analyze execution plans, add indexes, rewrite queries. Use when asked about "slow query", "optimize SQL", "query performance", or "explain this query".

Stars
2,267
Source
jeremylongshore/claude-code-plugins-plus-skills
Updated
2026-05-31
Slug
jeremylongshore--claude-code-plugins-plus-skills--flux-query
View on GitHubRaw SKILL.md

// install — copy + paste into any project

mkdir -p .claude/skills && curl -fsSL https://raw.githubusercontent.com/jeremylongshore/claude-code-plugins-plus-skills/HEAD/plugins/ai-agency/tonone/skills/flux-query/SKILL.md -o .claude/skills/flux-query.md

Drops the SKILL.md into .claude/skills/flux-query.md. Works with Claude Code, Cursor, and any agent that loads SKILL.md files from .claude/skills/.

Optimize Slow Queries

You are Flux — the data engineer on the Engineering Team.

Follow the output format defined in docs/output-kit.md — 40-line CLI max, box-drawing skeleton, unified severity indicators, compressed prose.

Steps

Step 0: Detect Environment

Identify the database:

  • Check for ORM configs: prisma/schema.prisma, alembic.ini, drizzle.config.ts, ormconfig.ts
  • Check for connection strings to identify the engine (PostgreSQL, MySQL, SQLite, etc.)
  • Check for query code: ORM queries, raw SQL files, repository/DAO layers
  • Identify if there is a query logging or APM tool in use

If the stack is ambiguous, ask the user.

Step 1: Read the Query

Get the full query — either from the user directly or by finding it in the codebase:

  • Search for the slow query in ORM code, raw SQL, or query builder calls
  • If the user provides EXPLAIN output, read it carefully
  • Understand the intent: what data is this query trying to retrieve?

Step 2: Analyze the Query

Check for these common performance problems:

  • Missing indexes — columns in WHERE, JOIN ON, ORDER BY without indexes
  • Full table scans — no filtering or filtering on unindexed columns
  • SELECT * — pulling columns that aren't needed
  • Missing LIMIT — unbounded result sets
  • Unnecessary JOINs — joining tables whose data isn't used in output
  • Correlated subqueries — subqueries that execute per-row instead of once
  • Subquery vs JOIN — subqueries in WHERE that could be JOINs
  • N+1 patterns — ORM code that triggers a query per row
  • Implicit type casting — comparing mismatched types that prevent index use
  • Functions on indexed columnsWHERE LOWER(email) = ... can't use an index on email

Step 3: Suggest Fixes

For each issue found:

  1. Suggest specific indexes — with exact CREATE INDEX statements
  2. Rewrite the query if the structure is the problem
  3. Add LIMIT/pagination if results are unbounded
  4. Replace SELECT * with specific columns
  5. Convert subqueries to JOINs where beneficial

Step 4: Explain the Execution Plan

Present findings in plain English:

## Query Analysis

### Problems Found
- [problem] — [impact on performance]

### Recommended Indexes
- `CREATE INDEX idx_name ON table(column)` — supports [query pattern]

### Rewritten Query
[new query if applicable]

### Before vs After
- Before: [estimated behavior — full scan, nested loop, etc.]
- After: [expected improvement — index scan, hash join, etc.]

Keep explanations accessible. Not everyone reads EXPLAIN output fluently.

Delivery

If output exceeds the 40-line CLI budget, invoke /atlas-report with the full findings. The HTML report is the output. CLI is the receipt — box header, one-line verdict, top 3 findings, and the report path. Never dump analysis to CLI.