mysql-patterns
Faz seu agente otimizar o banco de dados MySQL. Ajuda a criar tabelas, índices e consultas eficientes para aplicações.
O que ela faz
Esta ferramenta ajuda a criar e otimizar bancos de dados MySQL e MariaDB. Ela oferece padrões para organizar tabelas, criar índices eficientes e escrever consultas rápidas.
Quando usar
- ✓Ao projetar a estrutura de tabelas e índices.
- ✓Ao investigar por que consultas ao banco de dados estão lentas.
- ✓Ao configurar a conexão do seu aplicativo com o banco de dados.
Exemplo do que pedir para a IA
“Como posso criar um índice para que a busca por nome e data de criação seja mais rápida na minha tabela de usuários?”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
A ferramenta sugere as melhores práticas baseadas em exemplos de código e explicações. Ela mostra como definir tabelas, quais tipos de dados usar e como escrever consultas que funcionam bem.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add affaan-m/ECC --skill mysql-patternsOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/mysql-patterns/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Padrões MySQL
Use esta habilidade ao trabalhar com design de schema MySQL ou MariaDB, migrações, investigação de consultas lentas, transações estilo fila, pools de conexão ou configuração de banco de dados de produção. Prefira verificações exatas de versão antes de aplicar um padrão específico de recurso, pois MySQL e MariaDB divergiram em vários detalhes SQL.
Ativação
- Projetando tabelas, índices e restrições MySQL ou MariaDB
- Revisando migrações antes que elas sejam executadas em grandes tabelas de produção
- Depurando consultas lentas, esperas de bloqueio, deadlocks ou esgotamento de conexão
- Adicionando paginação por conjunto de chaves, upserts, busca de texto completo, colunas JSON ou filas
- Configurando pools de conexão de aplicativos, réplicas de leitura, TLS ou logs lentos
Verificação de Versão
Comece identificando o engine e a versão:
SELECT VERSION();
SHOW VARIABLES LIKE 'version_comment';
Mantenha a orientação de MySQL e MariaDB separada quando a sintaxe diferir:
- Documentos MySQL apelidos de linha como substitutos para
VALUES(col)emON DUPLICATE KEY UPDATE;VALUES(col)é obsoleto lá. - Documentos MariaDB
VALUES(col)como a maneira suportada de referenciar valores inseridos emON DUPLICATE KEY UPDATE; use-o para compatibilidade entre engines. SKIP LOCKEDé apropriado apenas para trabalho semelhante a fila. Ele pula linhas bloqueadas e pode retornar uma visão inconsistente, portanto, não o use para contabilidade geral ou leituras sensíveis à integridade.
Padrões de Schema
CREATE TABLE orders (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
account_id BIGINT UNSIGNED NOT NULL,
status VARCHAR(32) NOT NULL,
total DECIMAL(15, 2) NOT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at DATETIME NULL,
PRIMARY KEY (id),
KEY idx_orders_account_status_created (account_id, status, created_at),
KEY idx_orders_active (account_id, deleted_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
Escolhas padrão:
| Caso de Uso | Prefira | Evite |
|---|---|---|
| Chaves primárias substitutas | BIGINT UNSIGNED AUTO_INCREMENT |
INT para tabelas que podem crescer além de 2 bilhões de linhas |
| Chaves de busca UUID | BINARY(16) com helpers de conversão |
Chaves primárias VARCHAR(36) em tabelas quentes |
| Dinheiro e quantidades exatas | DECIMAL(p, s) |
FLOAT ou DOUBLE |
| Texto voltado para o usuário | Tabelas e índices utf8mb4 |
Padrões MySQL utf8 / utf8mb3 |
| Timestamps de aplicativo | DATETIME com UTC gerenciado pelo app |
Assumindo que DATETIME armazena metadados de fuso horário |
| Exclusões lógicas (soft deletes) | deleted_at DATETIME NULL mais índices com escopo |
Filtragem de linhas logicamente excluídas sem um índice |
| Valores de status extensíveis | Tabela de consulta ou VARCHAR com restrição |
ENUM quando os valores mudam com frequência |
Indexação
A ordem do índice composto geralmente segue primeiro os predicados de igualdade, depois as colunas de intervalo ou de ordenação:
CREATE INDEX idx_orders_account_status_created
ON orders (account_id, status, created_at);
SELECT id, total
FROM orders
WHERE account_id = ?
AND status = 'pending'
AND created_at >= ?
ORDER BY created_at DESC
LIMIT 50;
Use EXPLAIN antes de adicionar ou alterar um índice:
EXPLAIN
SELECT id, total
FROM orders
WHERE account_id = 123 AND status = 'pending'
ORDER BY created_at DESC
LIMIT 50;
Sinais para investigar:
| Campo | Sinal de Risco |
|---|---|
type |
ALL em uma tabela grande |
key |
NULL quando um predicado seletivo existe |
rows |
Estimativa de linha muito alta para um caminho interativo |
Extra |
Using temporary, Using filesort ou Using where amplo |
Evite adicionar índices cegamente. Cada índice aumenta o custo de escrita, o tempo de migração, o tamanho do backup e a pressão do buffer-pool.
Padrões de Consulta
Upsert
Forma compatível entre engines:
INSERT INTO user_settings (user_id, setting_key, setting_value)
VALUES (?, ?, ?)
ON DUPLICATE KEY UPDATE
setting_value = VALUES(setting_value),
updated_at = CURRENT_TIMESTAMP;
Forma de apelido de linha do MySQL:
INSERT INTO user_settings (user_id, setting_key, setting_value)
VALUES (?, ?, ?) AS new
ON DUPLICATE KEY UPDATE
setting_value = new.setting_value,
updated_at = CURRENT_TIMESTAMP;
Use a forma de apelido de linha apenas após confirmar que o destino é MySQL. Use
VALUES(col) para MariaDB ou frotas mistas MySQL/MariaDB.
Paginação por Conjunto de Chaves
SELECT id, name, created_at
FROM products
WHERE (created_at, id) < (?, ?)
ORDER BY created_at DESC, id DESC
LIMIT 50;
…
Perguntas frequentes
O que são 'padrões' neste contexto?
Padrões são soluções comprovadas e recomendadas para problemas comuns no uso de bancos de dados, como organizar dados ou fazer buscas mais rápidas.
Por que preciso me preocupar com a versão do MySQL/MariaDB?
Versões diferentes podem ter pequenas diferenças na forma como entendem comandos SQL, então é importante saber qual versão você está usando para aplicar o padrão correto.
O que é 'paginação por chave' (keyset pagination)?
É uma forma eficiente de buscar dados em páginas, especialmente em tabelas grandes, que é mais rápida do que métodos tradicionais que usam 'offset'.
Detalhes
Descrição original do autor
MySQL and MariaDB schema, query, indexing, transaction, replication, and connection-pool patterns for production backends. Use when designing MySQL or MariaDB schemas and indexes, or when a query, transaction, or replica lags.
repo: affaan-m/ECC
Popularidade
- Estrelas no GitHub
- 280 mil
- Posição no ranking
- #90
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
accessibility
Ajuda seu agente a criar interfaces que todos possam usar. Garante que sites e aplicativos funcionem bem para pessoas com deficiência, como cegos ou com mobilidade reduzida.
affaan-m/ECC
agent-architecture-audit
Faz seu agente verificar se tudo está funcionando corretamente. Ele encontra e conserta problemas em sistemas de IA, garantindo que funcionem como esperado.
affaan-m/ECC
agent-eval
Ajuda seu agente a comparar diferentes ferramentas de programação de IA. Ele mede qual é mais rápido, barato e confiável para realizar tarefas específicas.
affaan-m/ECC
agent-harness-construction
Faz seu agente entender melhor como realizar tarefas. Ele otimiza as ferramentas e instruções que o agente usa para aumentar suas chances de sucesso.
affaan-m/ECC
Skills parecidas
api-and-interface-design
Ajuda a criar APIs e interfaces bem definidas. É útil ao projetar como diferentes partes de um software vão se comunicar.
addyosmani/agent-skills
mason
Ajuda seu agente a escrever código limpo e funcional. Ele segue as regras definidas para garantir que tudo funcione como esperado.
sickn33/agentic-awesome-skills
max
Faz seu agente melhorar o código existente sem mudar o que ele faz. Ele deixa o código mais fácil de ler e manter.
sickn33/agentic-awesome-skills