Pular para o conteúdo
Skillpedia
APIs e servidores (backend)280 mil · #90

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

https://github.com/affaan-m/ECC/blob/main/pi/core/skills/mysql-patterns/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/affaan-m/ECC/blob/main/pi/core/skills/mysql-patterns/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
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-patterns

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/mysql-patterns/SKILL.md -o SKILL.md
Conteú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) em ON DUPLICATE KEY UPDATE; VALUES(col) é obsoleto lá.
  • Documentos MariaDB VALUES(col) como a maneira suportada de referenciar valores inseridos em ON 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

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas