Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Optimizes SQL queries, designs database schemas, and troubleshoots performance issues. Use when a user asks why their query is slow, needs help writing complex joins or aggregations, mentions database performance issues, or wants to design or migrate a schema. Invoke for complex queries, window functions, CTEs, indexing strategies, query plan analysis, covering index creation, recursive queries, EXPLAIN/ANALYZE interpretation, before/after query benchmarking, or migrating queries between databas
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-11 | ✗→✓ | ▲ Improved | 50% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 5% | 0% |
| case-15 | ✗→✓ | ▲ Improved | -31% | 0% |
| case-16 | ✗→✓ | ▲ Improved | -31% | 0% |
| case-17 | ✗→✓ | ▲ Improved | -40% | 0% |
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 |
sql-- 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
sql-- 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;
sql-- 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 / indexsql-- 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:
Other measured skills in the registry, with their headline benchmark lift.