Manual MyTable

MySQL • Partições

As partições dividem uma tabela grande em pedaços menores gerenciados pelo MySQL. Isso pode melhorar manutenção (arquivar/limpar períodos), auxiliar performance com partition pruning (o otimizador ignora partições fora do filtro) e facilitar operações administrativas em grandes volumes.


Quando considerar particionar

  • Tabelas com muitos milhões de linhas.
  • Consultas que filtram quase sempre por uma chave natural (ex.: data, região, tenant_id).
  • Necessidade de arquivar ou descartar períodos antigos com impacto mínimo.

Dica: Se as consultas não filtram pela coluna de partição, o ganho tende a ser limitado.


Tipos de partição (MySQL)

  • RANGE: por intervalos (ex.: datas por mês/ano, faixas numéricas).
  • LIST: por listas de valores discretos (ex.: UF, país, categoria).
  • HASH / LINEAR HASH: distribui linhas entre N partições por hash da coluna.
  • RANGE/LIST COLUMNS: variação que usa o valor da coluna diretamente (útil para DATE).

Importante (MySQL): todas as chaves UNIQUE (incluindo a PRIMARY KEY) devem incluir a(s) coluna(s) de partição. Caso contrário, a criação/alteração falha.


Abrir “Gerenciar Partições”

  1. Conecte-se à sua conexão MySQL e selecione o banco.
  2. Na árvore, escolha a tabela alvo.
  3. No menu de ações, toque em Partições.

Você verá o tipo de particionamento, a coluna (ou expressão) e a lista de partições existentes.


Criar particionamento

  1. Selecione o tipo (RANGE/LIST/HASH) e a(s) coluna(s) de partição.
  2. Defina o plano inicial (ex.: partições mensais de 12 meses + uma MAXVALUE).
  3. Revise chaves UNIQUE/PK: elas devem conter a coluna de partição.
  4. Confirmar em Criar.

Dica: Para RANGE por data, prefira RANGE COLUMNS(data) com limites do tipo VALUES LESS THAN ('2025-02-01').


Operações comuns

Adicionar partição

  • Use ao chegar um novo período/valor (ex.: próximo mês).
  • Informe o intervalo/valor e confirme para anexar a nova partição.

Remover/Arquivar partição

  • Para RANGE, descarte meses/anos antigos após backup.
  • Em ambientes que suportam, você pode EXCHANGE PARTITION com uma tabela “estática” para arquivar rapidamente.

Reorganizar partições

  • Permite subdividir uma partição existente (ex.: um ano → meses).

Índices e constraints

  • Crie índices pensando nos filtros dentro de cada partição.
  • Regra-chave: UNIQUE/PK devem incluir a coluna de partição (ex.: PK em (empresa_id, id) se a partição for por empresa_id).

Boas práticas

  • Escolha a coluna de partição mais usada nos filtros (data é comum).
  • Mantenha quantidade equilibrada de partições (dezenas/centenas, não milhares).
  • Automatize a criação de novas partições (ex.: tarefa mensal).
  • Combine com índices adequados e monitore planos com EXPLAIN no Editor SQL.

Limitações e observações

  • Se as consultas não filtram a coluna de partição, pode não haver pruning efetivo.
  • Alterações em UNIQUE/PK que não incluam a coluna de partição não são permitidas.
  • Algumas operações DDL reconstroem a tabela; planeje janela para grandes volumes.

Erros comuns (e soluções)

“A UNIQUE/PRIMARY KEY must include all columns in the partitioning function”

  • Inclua a coluna de partição em todas as chaves UNIQUE/PK, ou mude a estratégia de partição.

“Range overlaps” / “Partition out of range”

  • Revise limites de RANGE/LIST. Não pode haver sobreposição; mantenha uma partição “aberta” (ex.: MAXVALUE) para o futuro.

“Operação muito lenta” em tabelas enormes

  • Prefira EXCHANGE PARTITION para movimentar dados, e agende operações pesadas fora do pico.

Ferramentas relacionadas

Próximo: MySQL • Manutenção • Voltar: MySQL • Índices