home / skills / 89jobrien / steve / database-optimization

database-optimization skill

/steve/skills/database-optimization

This skill helps you optimize slow database queries, fix N+1 problems, and design effective indexes to boost PostgreSQL, MySQL, and other DB performance.

npx playbooks add skill 89jobrien/steve --skill database-optimization

Review the files below or copy the command above to add this skill to your agents.

Files (2)
SKILL.md
3.1 KB
---
name: database-optimization
description: SQL query optimization and database performance specialist. Use when
  optimizing slow queries, fixing N+1 problems, designing indexes, implementing caching,
  or improving database performance. Works with PostgreSQL, MySQL, and other databases.
author: Joseph OBrien
status: unpublished
updated: '2025-12-23'
version: 1.0.1
tag: skill
type: skill
---

# Database Optimization

This skill optimizes database performance including query optimization, indexing strategies, N+1 problem resolution, and caching implementation.

## When to Use This Skill

- When optimizing slow database queries
- When fixing N+1 query problems
- When designing indexes
- When implementing caching strategies
- When optimizing database migrations
- When improving database performance

## What This Skill Does

1. **Query Optimization**: Analyzes and optimizes SQL queries
2. **Index Design**: Creates appropriate indexes
3. **N+1 Resolution**: Fixes N+1 query problems
4. **Caching**: Implements caching layers (Redis, Memcached)
5. **Migration Optimization**: Optimizes database migrations
6. **Performance Monitoring**: Sets up query performance monitoring

## How to Use

### Optimize Queries

```
Optimize this slow database query
```

```
Fix the N+1 query problem in this code
```

### Specific Analysis

```
Analyze query performance and suggest indexes
```

## Optimization Areas

### Query Optimization

**Techniques:**

- Use EXPLAIN ANALYZE
- Optimize JOINs
- Reduce data scanned
- Use appropriate indexes
- Avoid SELECT *

### Index Design

**Strategies:**

- Index frequently queried columns
- Composite indexes for multi-column queries
- Avoid over-indexing
- Monitor index usage
- Remove unused indexes

### N+1 Problem

**Pattern:**

```python
# Bad: N+1 queries
users = User.all()
for user in users:
    posts = Post.where(user_id=user.id)  # N queries

# Good: Single query with JOIN
users = User.all().includes(:posts)  # 1 query
```

## Examples

### Example 1: Query Optimization

**Input**: Optimize slow user query

**Output**:

```markdown
## Database Optimization: User Query

### Current Query
```sql
SELECT * FROM users
WHERE email = '[email protected]';
-- Execution time: 450ms
```

### Analysis

- Full table scan (no index on email)
- Scanning 1M+ rows

### Optimization

```sql
-- Add index
CREATE INDEX idx_users_email ON users(email);

-- Optimized query
SELECT id, email, name FROM users
WHERE email = '[email protected]';
-- Execution time: 2ms
```

### Impact

- Query time: 450ms → 2ms (99.5% improvement)
- Index size: ~50MB

```

## Best Practices

### Database Optimization

1. **Measure First**: Use EXPLAIN ANALYZE
2. **Index Strategically**: Not every column needs an index
3. **Monitor**: Track slow query logs
4. **Cache**: Cache expensive queries
5. **Denormalize**: When justified by read patterns

## Reference Files

- **`references/query_patterns.md`** - Common query optimization patterns, anti-patterns, and caching strategies

## Related Use Cases

- Query optimization
- Index design
- N+1 problem resolution
- Caching implementation
- Database performance improvement

Overview

This skill is a SQL query optimization and database performance specialist that focuses on practical, measurable improvements. It helps diagnose slow queries, design indexes, resolve N+1 problems, implement caching, and streamline migrations across PostgreSQL, MySQL, and similar systems. The goal is faster responses, lower load, and predictable scaling.

How this skill works

I analyze queries and execution plans (EXPLAIN / EXPLAIN ANALYZE), identify hotspots, and recommend concrete changes such as rewritten SQL, indexes, or schema adjustments. I propose caching layers (Redis, Memcached) and denormalization only when supported by data patterns, and advise on migration strategies to minimize downtime. I also recommend monitoring and alerting approaches to validate improvements and catch regressions.

When to use it

  • A specific query or endpoint is unexpectedly slow under load
  • You observe N+1 query patterns in application code
  • You need an index strategy for high-read tables
  • You want to introduce caching without breaking consistency
  • You need to optimize heavy or long-running migrations

Best practices

  • Measure before changing: collect EXPLAIN ANALYZE and slow query logs
  • Index strategically: choose single or composite indexes based on query filters and ordering
  • Avoid SELECT *; return only required columns to reduce IO
  • Resolve N+1 by eager-loading or batching related queries
  • Cache high-cost, read-heavy results with TTL and explicit invalidation
  • Monitor index usage and remove unused indexes to reduce write overhead

Example use cases

  • Add an index and rewrite a slow SELECT to drop full table scans
  • Refactor ORM code to eliminate N+1 queries by eager loading or joins
  • Design composite indexes for frequent multi-column WHERE+ORDER BY patterns
  • Introduce Redis caching for a hot read endpoint with cache-aside pattern
  • Plan and run a zero-downtime migration that reindexes large tables incrementally

FAQ

Will adding indexes always speed up queries?

Not always. Indexes speed reads but add write and storage cost. Choose indexes based on query patterns and monitor their usage.

How do I find N+1 problems in my app?

Profile requests, inspect generated SQL per request, and look for repeated similar queries. Use ORM-specific tools or logging to surface them.