# Gorm SQL Query Performance

> GORM + PostgreSQL query performance review. Use when optimizing slow queries, designing indexes, analyzing N+1 patterns, or configuring connection pools. Trigger on "slow", "optimize", "index", "EXPLAIN", "N+1", or performance degradation.

- Skill: `saifoelloh/gorm-sql-query-performance` (Agent Skill, multi-file: 8 files)
- Install (CLI): `npx skillmds@latest add saifoelloh/gorm-sql-query-performance`
- Raw SKILL.md: https://api.skillmd.com/api/skills/saifoelloh/gorm-sql-query-performance/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Data & Analytics
- License: MIT
- Author: saifoelloh (https://skillmd.com/u/saifoelloh)
- Updated: 2026-09-10
- Page: https://skillmd.com/skills/saifoelloh/gorm-sql-query-performance

---


# Query Performance

Expert-level performance review for GORM + PostgreSQL queries. Detects N+1 patterns, missing indexes, connection pool misconfigurations, and memory-inefficient data fetching.

## When to Apply

Use this skill when:
- An endpoint is slow or degrading under load
- Reviewing repository code for N+1 query patterns
- Designing indexes for new tables or query patterns
- Investigating connection pool exhaustion
- Processing large datasets in background jobs

## Rule Categories

| Priority | Count | Focus |
|---|---|---|
| Critical | 2 | N+1 queries, unindexed foreign keys |
| High | 3 | EXPLAIN ANALYZE, connection pool, batch processing |
| Medium | 2 | COUNT vs len(), partial indexes |

## Rules Covered (7 total)

### Critical Issues (2)
- `critical-n-plus-one` — Detect and eliminate N+1 query patterns using Preload
- `critical-unindexed-fk` — Index foreign keys and all WHERE clause columns

### High-Impact Patterns (3)
- `high-explain-analyze` — Use EXPLAIN (ANALYZE, BUFFERS) before declaring a query optimized
- `high-connection-pool` — Configure connection pool parameters explicitly for production
- `high-find-in-batches` — Use FindInBatches for large dataset processing

### Medium Improvements (2)
- `medium-count-query` — Use db.Count instead of len() on full fetch
- `medium-partial-index` — Use partial indexes for filtered queries on large tables

## Trigger Phrases

- "Why is this query slow?"
- "Optimize this query"
- "Check for N+1"
- "Add an index"
- "EXPLAIN output"
- "Performance issue"
- "Connection pool"
- "Process large dataset"

## Related Skills

- [gorm-query-patterns](../gorm-query-patterns/SKILL.md) — For ORM patterns that cause N+1
- [postgresql-syntax](../postgresql-syntax/SKILL.md) — For ILIKE and index-aware SQL syntax
- [migration-safety](../migration-safety/SKILL.md) — For `CREATE INDEX CONCURRENTLY` in migrations

