From aigroup-workflow
Optimizes SQL queries, designs schemas, and troubleshoots performance issues using window functions, CTEs, indexing, and EXPLAIN plan analysis. Supports PostgreSQL, MySQL, SQL Server, and Oracle.
How this skill is triggered — by the user, by Claude, or both
Slash command
/aigroup-workflow:sql-proThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
1. **Schema Analysis** - Review database structure, indexes, query patterns, performance bottlenecks
EXPLAIN ANALYZE and confirm no sequential scans on large tables; if query does not meet sub-100ms target, iterate on index selection or query rewrite before proceedingLoad detailed guidance based on context:
| Topic | Reference | Load When |
|---|---|---|
| Query Patterns | references/query-patterns.md | JOINs, CTEs, subqueries, recursive queries |
| Window Functions | references/window-functions.md | ROW_NUMBER, RANK, LAG/LEAD, analytics |
| Optimization | references/optimization.md | EXPLAIN plans, indexes, statistics, tuning |
| Database Design | references/database-design.md | Normalization, keys, constraints, schemas |
| Dialect Differences | references/dialect-differences.md | PostgreSQL vs MySQL vs SQL Server specifics |
-- Isolate expensive subquery logic for reuse and readability
WITH ranked_orders AS (
SELECT
customer_id,
order_id,
total_amount,
ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_date DESC) AS rn
FROM orders
WHERE status = 'completed' -- filter early, before the join
)
SELECT customer_id, order_id, total_amount
FROM ranked_orders
WHERE rn = 1; -- latest completed order per customer
-- Running total and rank within partition — no self-join required
SELECT
department_id,
employee_id,
salary,
SUM(salary) OVER (PARTITION BY department_id ORDER BY hire_date) AS running_payroll,
RANK() OVER (PARTITION BY department_id ORDER BY salary DESC) AS salary_rank
FROM employees;
-- PostgreSQL: always use ANALYZE to see actual row counts vs. estimates
EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT)
SELECT *
FROM orders o
JOIN customers c ON c.id = o.customer_id
WHERE o.created_at > NOW() - INTERVAL '30 days';
Key things to check in the output:
ANALYZE <table> to refresh statisticsread count signals missing cache / index-- BEFORE: correlated subquery, one execution per row (slow)
SELECT order_id,
(SELECT SUM(quantity) FROM order_items oi WHERE oi.order_id = o.id) AS item_count
FROM orders o;
-- AFTER: single aggregation join (fast)
SELECT o.order_id, COALESCE(agg.item_count, 0) AS item_count
FROM orders o
LEFT JOIN (
SELECT order_id, SUM(quantity) AS item_count
FROM order_items
GROUP BY order_id
) agg ON agg.order_id = o.id;
-- Supporting covering index (includes all columns touched by the query)
CREATE INDEX idx_order_items_order_qty
ON order_items (order_id)
INCLUDE (quantity);
When implementing SQL solutions, provide:
npx claudepluginhub codeape-7/ai-agent-workflowgroupOptimizes SQL queries, designs database schemas, and troubleshoots performance issues. Covers window functions, CTEs, indexing strategies, EXPLAIN ANALYZE interpretation, and query migration across PostgreSQL, MySQL, and SQL Server.
<!-- AUTO-GENERATED by export-plugins.py — DO NOT EDIT -->
Optimizes slow SQL queries using systematic patterns, proper indexing, EXPLAIN plan analysis, and N+1 fixes. Useful for debugging performance, schema design, reducing DB load, and improving scalability.