agentleFS
iwritec0deiwritec0de/app-dev/skills/database-optimizer/SKILL.md

database-optimizer

Skill3 starsChanged 7 months agoMITView on GitHub

This skill should be used when the user asks to "optimize a database query", "analyze a slow query", "review EXPLAIN output", "design indexes", "fix N+1 queries", or mentions "query optimization", "slow query", "EXPLAIN", "index", "performance", "query plan", "table scan", "index tuning", "N+1", "query analysis". Provides database query optimization, performance tuning, index design, and EXPLAIN plan interpretation.

25 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use shopify-expert, monitoring-expert and 10 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • JeffallanSkill

    shopify-expert

    Builds and debugs Shopify themes (.liquid files, theme.json, sections), develops custom Shopify apps (shopify.app.toml, OAuth, webhooks), and implements Storefront API integrations for headless storefronts. Use when building or customizing Shopify themes, creating Hydrogen or custom React storefronts, developing Shopify apps, implementing checkout UI extensions or Shopify Functions, optimizing performance, or integrating third-party services. Invoke for Liquid templating, Storefront API, app development, checkout customization, Shopify Plus features, App Bridge, Polaris, or Shopify CLI workflows.

    Also in 7 projects that use this

  • JeffallanSkill

    monitoring-expert

    Configures monitoring systems, implements structured logging pipelines, creates Prometheus/Grafana dashboards, defines alerting rules, and instruments distributed tracing. Implements Prometheus/Grafana stacks, conducts load testing, performs application profiling, and plans infrastructure capacity. Use when setting up application monitoring, adding observability to services, debugging production issues with logs/metrics/traces, running load tests with k6 or Artillery, profiling CPU/memory bottlenecks, or forecasting capacity needs.

    Also in 8 projects that use this

  • +10 more from Jeffallan

The file

We split this skill into the rules it gives an agent

1 rule. 0 are common, 0 are distinctive, and 1 is very specific to this project.

  • 0

    Common

    Most of the 23 edited versions we read keep these.

  • 0

    Distinctive

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Read reference/query-patterns.md for efficient pagination, CTEs, window functions, and materialized views.

    line 67

“Common” is measured: kept by at least 6 in 10 of the 23 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Database Optimizer Skill

You are a database performance expert specializing in query optimization and index design.

Critical Rules

  • Always EXPLAIN first — never optimize without reading the query plan
  • Index based on actual queries — not guesses; check slow query logs
  • Don't over-index — each index slows writes and consumes storage
  • Measure before and after — performance claims require numbers
  • Prefer covering indexes — avoid heap lookups when possible
  • Watch for N+1 — the most common performance killer in ORMs
  • Understand your data distribution — selectivity determines index effectiveness

EXPLAIN Analysis

Key metrics to check in query plans:

MetricGoodBad
Scan typeIndex Scan, Index Only ScanSeq Scan on large tables
RowsEstimated ≈ ActualOff by 10x+ (stale statistics)
Loops1 (or low)Thousands (nested loop on unindexed join)
SortIndex-backedIn-memory or disk sort on large sets

Common node types: Seq Scan, Index Scan, Index Only Scan, Bitmap Index Scan, Hash Join, Merge Join, Nested Loop. Read reference/explain-analysis.md for full interpretation guide.

Index Design

-- Composite index: column order matters (most selective first for equality)
CREATE INDEX idx_orders_status_date ON orders (status, created_at);

-- Partial index: index only what you query
CREATE INDEX idx_orders_active ON orders (created_at) WHERE status = 'active';

-- Covering index: include columns to avoid heap lookup
CREATE INDEX idx_orders_cover ON orders (user_id) INCLUDE (total, status);

Index types: B-tree (default, most cases), Hash (equality only), GIN (arrays, JSONB, full-text), GiST (geometry, range), BRIN (naturally ordered large tables). Read reference/index-strategies.md for details.

Query Patterns

  • **Avoid SELECT *** — fetch only needed columns
  • Use cursor pagination — not OFFSET for large datasets (WHERE id > ? ORDER BY id LIMIT ?)
  • Batch operations — bulk INSERT with VALUES lists, not row-by-row
  • Push filtering to DB — don't fetch all rows and filter in application code
  • Use JOINs efficiently — ensure join columns are indexed
  • Prefer EXISTS over IN — for correlated subqueries on large sets

Read reference/query-patterns.md for efficient pagination, CTEs, window functions, and materialized views.

N+1 Detection and Fixes

# N+1 pattern (BAD): 1 query for list + N queries for details
SELECT * FROM orders;                    -- 1 query
SELECT * FROM items WHERE order_id = ?;  -- N queries

# Fixed with JOIN or subquery (GOOD): 1-2 queries total
SELECT o.*, i.* FROM orders o
JOIN items i ON i.order_id = o.id;       -- 1 query

ORM fixes: use eager loading (include, JOIN FETCH, with()), batch loading, or data loaders.

Common Bottlenecks

SymptomLikely CauseFix
Slow single queryMissing index or bad planEXPLAIN + add index
Many fast queriesN+1 patternEager load / batch
Slow writesToo many indexesAudit and remove unused
Lock waitsLong transactionsShorten tx, use SKIP LOCKED
Connection errorsPool exhaustionIncrease pool, fix leaks
Gradual slowdownTable/index bloatVACUUM, REINDEX, OPTIMIZE

Anti-Patterns

  • Don't index every column — index what queries actually use
  • Don't use OFFSET for deep pagination — use cursor/keyset pagination
  • Don't optimize without EXPLAIN — intuition about query plans is often wrong
  • Don't ignore statistics — run ANALYZE after bulk data changes
  • Don't use ORM defaults blindly — check generated SQL for N+1 and unnecessary columns

Related

  • reference/explain-analysis.md — Full EXPLAIN output interpretation for PostgreSQL and MySQL
  • reference/index-strategies.md — Index types, composite ordering, partial indexes, maintenance
  • reference/query-patterns.md — Efficient pagination, batch ops, CTEs, window functions

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.