К основному содержанию
скилл Claude Code CX Codex Cursor

sql-optimization-patterns — скилл для Claude Code

Скилл разбирает медленные SQL-запросы, планы EXPLAIN и стратегию индексов. Нужен при поиске Seq Scan, проблемах с JOIN и N+1.

Установить в Claude Code · Через маркетплейс плагинов Все способы и платформы ↓
/plugin marketplace add wshobson/agents
/plugin install developer-essentials@claude-code-workflows
Открыть на GitHub

Что делает sql-optimization-patterns

Скилл ведёт разбор через EXPLAIN и EXPLAIN ANALYZE: предлагает смотреть на Seq Scan, Index Scan, стоимость, число строк и фактическое время. В примерах есть PostgreSQL-запросы для анализа медленных запросов и поиска неиспользуемых индексов.

Он покрывает B-Tree, Hash, GIN, GiST и BRIN, составные, частичные, функциональные и покрывающие индексы. Также подсказывает, как сократить SELECT *, переписать WHERE и JOIN, обновить статистику через ANALYZE, VACUUM или REINDEX. Подробные паттерны лежат в references/details.md.

Скилл предупреждает, что лишние индексы замедляют INSERT, UPDATE и DELETE, а функции в WHERE и LIKE с ведущим % могут мешать индексу. Его стоит ставить разработчикам с PostgreSQL и SQL-нагрузкой; для проекта без базы данных это лишнее.

Какие задачи решает

  • разобрать план EXPLAIN ANALYZE
  • найти причину Seq Scan
  • создать составной или частичный индекс
  • переписать JOIN перед фильтрацией
  • выявить неиспользуемые индексы

Примеры запросов агенту

  • Разбери этот медленный запрос через EXPLAIN ANALYZE и предложи индекс.
  • Проверь, почему WHERE с LOWER(email) не использует индекс.
  • Помоги устранить N+1-запросы при загрузке orders для users.

Как установить sql-optimization-patterns

1Через маркетплейс плагинов

/plugin marketplace add wshobson/agents
/plugin install developer-essentials@claude-code-workflows

2Через Skills CLI (Vercel)

npx skills add wshobson/agents --skill sql-optimization-patterns -a claude-code

3Вручную: положить файлы

~/.claude/skills/sql-optimization-patterns/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/sql-optimization-patterns/

Похожие

xlsx официальный anthropics Работает с табличными файлами: создаёт, читает, правит и преобразует книги. Подходит, когда итогом должен стать файл Excel или другой табличный формат. Claude Code Claude.ai 187 223установок sql-optimization официальный github Помогает разбирать SQL-запросы, выбирать индексы и находить причины медленной работы. Подходит при тюнинге запросов в MySQL, PostgreSQL, SQL Server и Oracle. GitHub Copilot 15 701установок sql-code-review официальный github Проверяет SQL-код на проблемы безопасности, производительности и поддержки. Пригодится перед ревью запросов или схемы базы данных. GitHub Copilot 14 060установок postgresql-code-review официальный github Проверяет SQL и схему на ошибки, характерные для PostgreSQL. Пригодится перед ревью миграций, функций и запросов с JSONB. GitHub Copilot 12 608установок bigquery-basics официальный google Управляет ресурсами BigQuery и запускает SQL-запросы. Подходит для создания датасетов, таблиц, представлений и базовой загрузки данных. Claude Code Gemini CLI CX Codex 17 678установок powerbi-modeling официальный github Скилл помогает проектировать и проверять семантические модели Power BI, писать DAX и настраивать связи. Пригодится для рабочих моделей с RLS и расчётами. GitHub Copilot 9 934установок

Вопросы о sql-optimization-patterns

Как установить sql-optimization-patterns в Claude Code?

Выполните npx skills add wshobson/agents --skill sql-optimization-patterns -a claude-code. Скилл также доступен через marketplace-плагин developer-essentials@claude-code-workflows.

Что делает sql-optimization-patterns?

Он помогает анализировать SQL-планы выполнения, выбирать индексы и переписывать запросы. В фокусе медленные запросы, JOIN, N+1 и нагрузка на PostgreSQL.

Какие типы индексов рассматривает скилл?

В материалах есть B-Tree, Hash, GIN, GiST и BRIN. Разобраны также составные, частичные, функциональные и покрывающие индексы.

Исходный текст

SKILL.md · MIT
---
name: sql-optimization-patterns
description: Master SQL query optimization, indexing strategies, and EXPLAIN analysis to dramatically improve database performance and eliminate slow queries. Use when debugging slow queries, designing database schemas, or optimizing application performance.
---

# SQL Optimization Patterns

Transform slow database queries into lightning-fast operations through systematic optimization, proper indexing, and query plan analysis.

## When to Use This Skill

- Debugging slow-running queries
- Designing performant database schemas
- Optimizing application response times
- Reducing database load and costs
- Improving scalability for growing datasets
- Analyzing EXPLAIN query plans
- Implementing efficient indexes
- Resolving N+1 query problems

## Core Concepts

### 1. Query Execution Plans (EXPLAIN)

Understanding EXPLAIN output is fundamental to optimization.

**PostgreSQL EXPLAIN:**

```sql
-- Basic explain
EXPLAIN SELECT * FROM users WHERE email = '[email protected]';

-- With actual execution stats
EXPLAIN ANALYZE
SELECT * FROM users WHERE email = '[email protected]';

-- Verbose output with more details
EXPLAIN (ANALYZE, BUFFERS, VERBOSE)
SELECT u.*, o.order_total
FROM users u
JOIN orders o ON u.id = o.user_id
WHERE u.created_at > NOW() - INTERVAL '30 days';
```

**Key Metrics to Watch:**

- **Seq Scan**: Full table scan (usually slow for large tables)
- **Index Scan**: Using index (good)
- **Index Only Scan**: Using index without touching table (best)
- **Nested Loop**: Join method (okay for small datasets)
- **Hash Join**: Join method (good for larger datasets)
- **Merge Join**: Join method (good for sorted data)
- **Cost**: Estimated query cost (lower is better)
- **Rows**: Estimated rows returned
- **Actual Time**: Real execution time

### 2. Index Strategies

Indexes are the most powerful optimization tool.

**Index Types:**

- **B-Tree**: Default, good for equality and range queries
- **Hash**: Only for equality (=) comparisons
- **GIN**: Full-text search, array queries, JSONB
- **GiST**: Geometric data, full-text search
- **BRIN**: Block Range INdex for very large tables with correlation

```sql
-- Standard B-Tree index
CREATE INDEX idx_users_email ON users(email);

-- Composite index (order matters!)
CREATE INDEX idx_orders_user_status ON orders(user_id, status);

-- Partial index (index subset of rows)
CREATE INDEX idx_active_users ON users(email)
WHERE status = 'active';

-- Expression index
CREATE INDEX idx_users_lower_email ON users(LOWER(email));

-- Covering index (include additional columns)
CREATE INDEX idx_users_email_covering ON users(email)
INCLUDE (name, created_at);

-- Full-text search index
CREATE INDEX idx_posts_search ON posts
USING GIN(to_tsvector('english', title || ' ' || body));

-- JSONB index
CREATE INDEX idx_metadata ON events USING GIN(metadata);
```

### 3. Query Optimization Patterns

**Avoid SELECT \*:**

```sql
-- Bad: Fetches unnecessary columns
SELECT * FROM users WHERE id = 123;

-- Good: Fetch only what you need
SELECT id, email, name FROM users WHERE id = 123;
```

**Use WHERE Clause Efficiently:**

```sql
-- Bad: Function prevents index usage
SELECT * FROM users WHERE LOWER(email) = '[email protected]';

-- Good: Create functional index or use exact match
CREATE INDEX idx_users_email_lower ON users(LOWER(email));
-- Then:
SELECT * FROM users WHERE LOWER(email) = '[email protected]';

-- Or store normalized data
SELECT * FROM users WHERE email = '[email protected]';
```

**Optimize JOINs:**

```sql
-- Bad: Cartesian product then filter
SELECT u.name, o.total
FROM users u, orders o
WHERE u.id = o.user_id AND u.created_at > '2024-01-01';

-- Good: Filter before join
SELECT u.name, o.total
FROM users u
JOIN orders o ON u.id = o.user_id
WHERE u.created_at > '2024-01-01';

-- Better: Filter both tables
SELECT u.name, o.total
FROM (SELECT * FROM users WHERE created_at > '2024-01-01') u
JOIN orders o ON u.id = o.user_id;
```

## Detailed patterns and worked examples

Detailed pattern documentation lives in `references/details.md`. Read that file when the navigation tier above is insufficient.

## Best Practices

1. **Index Selectively**: Too many indexes slow down writes
2. **Monitor Query Performance**: Use slow query logs
3. **Keep Statistics Updated**: Run ANALYZE regularly
4. **Use Appropriate Data Types**: Smaller types = better performance
5. **Normalize Thoughtfully**: Balance normalization vs performance
6. **Cache Frequently Accessed Data**: Use application-level caching
7. **Connection Pooling**: Reuse database connections
8. **Regular Maintenance**: VACUUM, ANALYZE, rebuild indexes

```sql
-- Update statistics
ANALYZE users;
ANALYZE VERBOSE orders;

-- Vacuum (PostgreSQL)
VACUUM ANALYZE users;
VACUUM FULL users;  -- Reclaim space (locks table)

-- Reindex
REINDEX INDEX idx_users_email;
REINDEX TABLE users;
```

## Common Pitfalls

- **Over-Indexing**: Each index slows down INSERT/UPDATE/DELETE
- **Unused Indexes**: Waste space and slow writes
- **Missing Indexes**: Slow queries, full table scans
- **Implicit Type Conversion**: Prevents index usage
- **OR Conditions**: Can't use indexes efficiently
- **LIKE with Leading Wildcard**: `LIKE '%abc'` can't use index
- **Function in WHERE**: Prevents index usage unless functional index exists

## Monitoring Queries

```sql
-- Find slow queries (PostgreSQL)
SELECT query, calls, total_time, mean_time
FROM pg_stat_statements
ORDER BY mean_time DESC
LIMIT 10;

-- Find missing indexes (PostgreSQL)
SELECT
    schemaname,
    tablename,
    seq_scan,
    seq_tup_read,
    idx_scan,
    seq_tup_read / seq_scan AS avg_seq_tup_read
FROM pg_stat_user_tables
WHERE seq_scan > 0
ORDER BY seq_tup_read DESC
LIMIT 10;

-- Find unused indexes (PostgreSQL)
SELECT
    schemaname,
    tablename,
    indexname,
    idx_scan,
    idx_tup_read,
    idx_tup_fetch
FROM pg_stat_user_indexes
WHERE idx_scan = 0
ORDER BY pg_relation_size(indexrelid) DESC;
```

© Seth Hobson · MIT · wshobson/agents

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой