
Database Optimization
- 32 installs
- 4 repo stars
- Updated April 11, 2026
- 89jobrien/steve
database-optimization is a Claude Code skill that optimizes SQL queries and database performance through query tuning, index design, N+1 resolution, and caching.
About
database-optimization is a Claude Code skill for SQL query optimization and database performance. A developer uses it to speed up slow queries, fix N+1 problems, design indexes, and implement caching. It applies EXPLAIN ANALYZE, JOIN tuning, and index strategy against PostgreSQL, MySQL, and other databases.
- Optimizes slow SQL queries with EXPLAIN ANALYZE, JOIN tuning and index design
- Fixes N+1 query problems and adds caching layers (Redis, Memcached)
- Works with PostgreSQL, MySQL and other databases
Database Optimization by the numbers
- 32 all-time installs (skills.sh)
- Ranked #493 of 911 Databases skills by installs in the Skillselion catalog
- Data as of Jul 28, 2026 (Skillselion catalog sync)
database-optimization capabilities & compatibility
- Capabilities
- query optimization · index design · caching
- Works with
- postgres · mysql · redis
- Use cases
- database
- Pricing
- Free
What database-optimization says it does
SQL query optimization and database performance specialist.
This skill optimizes database performance including query optimization, indexing strategies, N+1 problem resolution, and caching implementation.
npx skills add https://github.com/89jobrien/steve --skill database-optimizationAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 32 |
|---|---|
| repo stars | ★ 4 |
| Last updated | April 11, 2026 |
| Repository | 89jobrien/steve ↗ |
What it does
Use it to diagnose and speed up slow queries, fix N+1 problems, design indexes, and add caching.
Who is it for?
Speeding up slow queries, fixing N+1 problems, and designing indexes on PostgreSQL or MySQL.
Skip if: NoSQL-only stacks or initial schema design from scratch.
When should I use this skill?
When optimizing slow queries, fixing N+1 problems, designing indexes, or implementing caching.
What you get
Faster queries backed by EXPLAIN ANALYZE, right-sized indexes, and caching.
- optimized queries
- index recommendations
- N+1 fixes
By the numbers
- 6 optimization areas
- example query improved 450ms to 2ms
Files
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 queryFix the N+1 query problem in this codeSpecific Analysis
Analyze query performance and suggest indexesOptimization 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:
# 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 queryExamples
Example 1: Query Optimization
Input: Optimize slow user query
Output:
## Database Optimization: User Query
### Current QuerySELECT * FROM users WHERE email = 'user@example.com'; -- Execution time: 450ms
### Analysis
- Full table scan (no index on email)
- Scanning 1M+ rows
### Optimization
-- Add index CREATE INDEX idx_users_email ON users(email);
-- Optimized query SELECT id, email, name FROM users WHERE email = 'user@example.com'; -- 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
Database Query Optimization Patterns
EXPLAIN ANALYZE Usage
PostgreSQL
EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT)
SELECT * FROM users WHERE email = 'test@example.com';MySQL
EXPLAIN ANALYZE
SELECT * FROM users WHERE email = 'test@example.com';Common Query Anti-Patterns
1. SELECT * Instead of Specific Columns
-- Bad: Fetches all columns
SELECT * FROM users WHERE id = 1;
-- Good: Fetch only needed columns
SELECT id, email, name FROM users WHERE id = 1;2. Missing WHERE Clause Index
-- Bad: Full table scan
SELECT * FROM orders WHERE status = 'pending';
-- Good: Add index on status
CREATE INDEX idx_orders_status ON orders(status);3. Leading Wildcard in LIKE
-- Bad: Cannot use index
SELECT * FROM users WHERE email LIKE '%@gmail.com';
-- Good: Use suffix column or full-text search
SELECT * FROM users WHERE email_domain = 'gmail.com';4. Functions on Indexed Columns
-- Bad: Index not used
SELECT * FROM orders WHERE YEAR(created_at) = 2024;
-- Good: Use range comparison
SELECT * FROM orders
WHERE created_at >= '2024-01-01' AND created_at < '2025-01-01';5. OR Conditions
-- Bad: May not use index efficiently
SELECT * FROM users WHERE status = 'active' OR role = 'admin';
-- Good: Use UNION for separate index scans
SELECT * FROM users WHERE status = 'active'
UNION
SELECT * FROM users WHERE role = 'admin';Index Design Patterns
Composite Index Order
-- Index columns in order of: equality, range, sort
-- Query: WHERE status = 'active' AND created_at > '2024-01-01' ORDER BY name
CREATE INDEX idx_composite ON users(status, created_at, name);Covering Index
-- Include all columns needed by query to avoid table lookup
CREATE INDEX idx_covering ON orders(customer_id, status)
INCLUDE (total, created_at);Partial Index
-- Index only frequently queried subset
CREATE INDEX idx_active_users ON users(email) WHERE status = 'active';N+1 Query Solutions
ORM Eager Loading
SQLAlchemy:
# Bad: N+1
users = session.query(User).all()
for user in users:
print(user.posts) # Triggers query per user
# Good: Eager load
users = session.query(User).options(joinedload(User.posts)).all()Django:
# Bad: N+1
users = User.objects.all()
for user in users:
print(user.posts.all())
# Good: Prefetch
users = User.objects.prefetch_related('posts').all()ActiveRecord:
# Bad: N+1
User.all.each { |u| puts u.posts }
# Good: Includes
User.includes(:posts).each { |u| puts u.posts }Caching Strategies
Query Result Caching
# Redis caching pattern
import redis
import json
def get_user(user_id):
cache_key = f"user:{user_id}"
cached = redis.get(cache_key)
if cached:
return json.loads(cached)
user = db.query("SELECT * FROM users WHERE id = %s", user_id)
redis.setex(cache_key, 3600, json.dumps(user)) # 1 hour TTL
return userCache Invalidation Patterns
- Time-based: Set TTL on cached entries
- Event-based: Invalidate on write operations
- Version-based: Include version in cache key
Related skills
FAQ
Which databases does it target?
PostgreSQL, MySQL, and other relational databases per the SKILL.md.
What caching does it use?
It implements caching layers such as Redis and Memcached.