ASD

Sql Optimization Patterns

Domina la optimización de consultas SQL, estrategias de indexado y análisis EXPLAIN para mejorar drásticamente el rendimiento de la base de datos y eliminar consultas lentas.

Estrellas
38.8k

en todo el repo

Actividad
47

0–100, la ruta de este skill

Actualizado
hace 2 meses

último commit aquí

Commits
1

últimos 90 días

Contexto
1.5k tok

61 tok en reposo

Paquete
2 archivos

13 KB

Instalar

Funciona con cualquier agente que lea SKILL.md

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

Se instala solo en este repositorio.

Qué hace

  • Analiza planes de ejecución EXPLAIN para identificar cuellos de botella en consultas
  • Diseña estrategias de indexado (B-Tree, GIN, GiST, BRIN, parciales, de expresión, covering)
  • Reescribe consultas SQL siguiendo patrones de optimización (evitar SELECT *, JOINs eficientes)
  • Detecta antipatrones comunes como over-indexing, LIKE con wildcard inicial o conversión implícita de tipos
  • Proporciona consultas de monitoreo para detectar índices faltantes o no usados en PostgreSQL

Úsalo cuando

  • Depurando consultas lentas
  • Diseñando esquemas de base de datos performantes
  • Optimizando tiempos de respuesta de la aplicación
  • Analizando planes de consulta EXPLAIN o resolviendo problemas N+1

No lo uses cuando

    Qué lo activa

    Di cualquiera de estas frases y el agente debería cargar este skill.

    • ¿Por qué esta consulta SQL es tan lenta?
    • Ayúdame a interpretar este EXPLAIN ANALYZE
    • ¿Qué índices debería crear para esta tabla users?
    • Optimiza este JOIN entre users y orders
    • Tengo un problema de N+1 queries, ¿cómo lo soluciono?

    SKILL.md

    En inglés

    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:

    -- Basic explain
    EXPLAIN SELECT * FROM users WHERE email = 'user@example.com';
    
    -- With actual execution stats
    EXPLAIN ANALYZE
    SELECT * FROM users WHERE email = 'user@example.com';
    
    -- 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
    -- 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 *:

    -- 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:

    -- Bad: Function prevents index usage
    SELECT * FROM users WHERE LOWER(email) = 'user@example.com';
    
    -- 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) = 'user@example.com';
    
    -- Or store normalized data
    SELECT * FROM users WHERE email = 'user@example.com';
    

    Optimize JOINs:

    -- 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
    -- 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

    -- 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;
    

    Reproducido de wshobson/agents bajo licencia MIT. Leer esta página en markdown.

    Archivos

    2 archivos en el paquete. Solo se lee SKILL.md al activarse — las referencias se cargan si el skill decide que las necesita.

    Antes de instalar

    Para patrones detallados y ejemplos trabajados, consulta references/details.md.

    Detalles

    Creador
    wshobson
    Categoría
    Bases de datos
    Licencia
    MIT
    Recursos incluidos
    referencias
    Repositorio
    wshobson/agents
    Código fuente
    Ver SKILL.md

    Etiquetas

    Más de wshobson/agents

    Este repo incluye 180 skills. Si instalas uno, normalmente ya tienes los demás.

    Úsalo al seleccionar y colocar iconos, imágenes, SVGs, diagramas o infografías de apoyo aprobados en un PPTX editable.

    Costo de contexto al activarse
    344 tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 26 días
    documentos

    Úsalo cuando pidan optimizar un prompt, mejorar su rendimiento, diseñar una plantilla, aplicar chain-of-thought, few-shot prompting o técnicas avanzadas de prompt engineering para producción.

    Costo de contexto al activarse
    1.3k tok
    Tamaño del paquete
    10 archivos
    Última actualización
    el mes pasado
    herramientas desarrollo

    Úsalo al redactar o reparar una especificación JSON con coordenadas explícitas para un PPTX editable.

    Costo de contexto al activarse
    489 tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 26 días
    documentos

    Úsalo para validar o reparar un PPTX editable en cuanto a geometría, accesibilidad, editabilidad nativa, linaje de fuente e integridad del paquete OOXML.

    Costo de contexto al activarse
    409 tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 26 días
    documentos

    Úsalo para analizar un PPTX de referencia en modo solo lectura: estructura, tema, tipografía, ritmo de layout, diagnósticos, catálogos de plantillas derivados o inspección segura del paquete OOXML.

    Costo de contexto al activarse
    689 tok
    Tamaño del paquete
    8 archivos
    Última actualización
    hace 26 días
    documentos

    Úsalo al preparar la narrativa, las fuentes y el contexto de diseño para un nuevo deck PPTX editable.

    Costo de contexto al activarse
    415 tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 26 días
    documentos

    Skills relacionados

    Ejecuta migraciones de bases de datos entre ORMs y plataformas con estrategias zero-downtime, transformación de datos y procedimientos de rollback.

    Costo de contexto al activarse
    2k tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 2 meses
    bases de datos

    Diseña e implementa event stores para sistemas de event sourcing: infraestructura, elección de tecnología y patrones de persistencia de eventos.

    Costo de contexto al activarse
    1k tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 2 meses
    bases de datos

    Testea contratos inteligentes de forma exhaustiva con Hardhat y Foundry: tests unitarios, de integración y forking de mainnet.

    Costo de contexto al activarse
    2k tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 2 meses
    testing qa