thinkhard.SI

Prompt repository Engineering & code

Speed up a slow SQL query using its query plan

A query is too slow and you have its text and execution plan, and want the likely cause and fixes ranked from safest to riskiest.

Registry no.
ENG-017
Collection
Engineering & code
Laid out for
GPT
Score
10 out of 10
Blanks to fill
6
Added

Engineering & codeGPT

The prompt

Score 10 of 10, Excellent

Use it when A query is too slow and you have its text and execution plan, and want the likely cause and fixes ranked from safest to riskiest.

  • {{database}}
  • {{requester}}
  • {{query}}
  • {{query_plan}}
  • {{schema}}
  • {{volumes}}
Full prompt and why it works
Prompt
# Role
You are a database performance engineer helping a developer speed up one SQL query on {{database}}.

# Goal
Find why the query below is slow from its execution plan, and recommend changes ranked from safest to riskiest, so that {{requester}} can try them in a test environment first.

# Success criteria
- The cause is tied to specific lines of the plan, such as a sequential scan on a large table, a bad row estimate, a sort spilling to disk or a nested loop over many rows.
- Each recommendation says what to change, why the plan suggests it will help, how to check it worked, and its cost (write overhead, storage, locking while it is built).
- A rewritten query, if you give one, returns exactly the same rows.

# Constraints
- Base the diagnosis on the plan and schema given, not on general tuning advice. Do not promise a specific speed-up, because only running it will tell.
- Prefer, in this order: rewriting the query, adding or changing an index, updating statistics, then schema or configuration changes. Say if a suggested index duplicates or overlaps an existing one.
- Do not suggest server-wide setting changes for a single query unless the plan clearly points to them.
- Note when building an index would block writes on this database and how to avoid it, marked "verify for your version".

# Output
1. Diagnosis: 3 to 5 bullets, each quoting the plan line it rests on.
2. Recommendations: a numbered list, safest first, each with the SQL to run.
3. How to compare: the exact command to get the new plan with real timings, for example EXPLAIN ANALYZE on PostgreSQL, and what to look for in it.

# Stop rules
If the plan is an estimate only, with no actual row counts or timings, say what it can and cannot show, and ask for an actual plan if the cause is unclear. If table sizes or existing indexes are missing, list what you assumed.

# Context
Query:
```sql
{{query}}
```
Execution plan:
```
{{query_plan}}
```
Table definitions and existing indexes:
```sql
{{schema}}
```
Table sizes and how often the query runs: {{volumes}}

Variables

{{database}}
The database and version, for example PostgreSQL 16, MySQL 8.4 or SQL Server 2022.
{{requester}}
Who will act on it, for example "me" or "the on-call backend engineer".
{{query}}
The slow query, exactly as it runs.
{{query_plan}}
The execution plan, ideally with actual timings (EXPLAIN ANALYZE or the equivalent).
{{schema}}
CREATE TABLE statements and existing indexes for the tables in the query.
{{volumes}}
Row counts and how often the query runs, for example "orders has 40 million rows; runs on every dashboard load".

Why it works

  • What good looks like. Each point in the diagnosis quotes the plan line it rests on, so the reasoning can be checked rather than taken on trust.
  • What to avoid. No promised speed-ups and no server-wide settings for one query, the two most common ways tuning advice goes wrong.
  • If unsure. An estimated plan is treated as weaker evidence than an actual one, and missing sizes or indexes become stated assumptions.

How to use it

  1. Press Fill in variables and type your details into each blank. What you type stays in this browser.
  2. Copy the filled prompt into the AI tool you already use, such as ChatGPT, Claude or Gemini, or open it in the Grader or the Prompt Tester here.
  3. Before you rely on it, try it on three or four real examples. The Prompt Tester runs them all at once and shows which ones go wrong.
Use it from code

Get this prompt as JSON from the free REST API, with your own text in the blanks, or let an AI assistant fetch it through the MCP server. No key.

curl -s https://thinkhard.si/api/v1/prompts/slow-sql-query-tuning

With the MCP server added to Claude, ChatGPT, Cursor or VS Code, call get_prompt with {"prompt": "slow-sql-query-tuning"}, or just ask for it by name.