Manual MyTable

MySQL • Partições

As partições dividem logicamente uma tabela grande em partes menores (por intervalos, listas ou hash). Isso pode melhorar manutenção (arquivar/descartar fatias antigas), acelerar consultas com filtros por data/intervalo e reduzir janelas de maintenance. O suporte e as estratégias variam conforme a versão do MySQL e a engine.


Quando considerar particionar

  • Tabelas muito grandes (dezenas/centenas de milhões de linhas).
  • Consultas filtradas por data ou por uma chave de intervalo (ex.: ano/mês).
  • Necessidade de arquivar dados antigos regularmente (ex.: mês fechado).
  • Manutenções pesadas (otimização/checagem) que podem ser feitas em uma partição por vez.

Dica: Se suas consultas não filtram pela coluna de partição, o ganho pode ser mínimo.


Pré-requisitos

  • Engine da tabela deve suportar partição (ex.: InnoDB).
  • Defina claramente a coluna de partição (ex.: data_evento ou ano_mes).
  • Planeje o esquema de partições (por RANGE, LIST ou HASH/KEY).

Abrir “Gerenciar Partições”

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

Tipos de partição (visão rápida)

RANGE

  • Divide por intervalos crescentes (ex.: por ano ou mês).
  • Ex.: partições de 2024-01, 2024-02, ..., MAXVALUE.
  • Ideal para arquivamento mensal e consultas por período.

LIST

  • Divide por valores discretos predefinidos (ex.: UF, categoria).
  • Bom quando os grupos são fixos e relativamente poucos.

HASH/KEY

  • Distribui linhas “uniformemente” entre N partições baseado em uma expressão/chave.
  • Útil para balancear escrita/leitura quando não há coluna de intervalo natural.

Operações comuns

Criar partições (em tabela já existente ou nova)

  1. Escolha o tipo (RANGE/LIST/HASH) e a coluna base.
  2. Defina o plano inicial (ex.: partições por mês do ano corrente + MAXVALUE).
  3. Revise o resumo e aplique.

Adicionar partição

  • Use quando chega um novo período (ex.: mês seguinte).
  • Informe o intervalo/valor da nova partição e confirme.

Remover/arquivar partição

  • Para RANGE, remova partições mais antigas após backup/ETL.
  • Considere primeiro TROCAR (exchange) a partição para uma tabela externa, se disponível, para arquivar os dados.

Reorganizar/mesclar

  • Reorganize partições para agrupar períodos antigos em menos partições.
  • Evite excesso de partições (degrada metadados e performance de plano).

Boas práticas

  • Particione por coluna realmente usada em filtros (datas são o caso típico).
  • Mantenha um calendário de criação de novas partições (automatize quando possível).
  • Evite milhares de partições; mantenha um número equilibrado (dezenas/centenas, conforme o caso).
  • Combine com índices adequados nas colunas mais filtradas dentro de cada partição.
  • Valide em homolog e monitore planos de execução após particionar.

Limitações e alertas

  • Algumas restrições existem para PK/UK/índices em tabelas particionadas — siga as recomendações do seu MySQL.
  • Alterar uma tabela enorme para particionada pode exigir tempo e espaço (planeje janela).
  • Se a collation/engine mudar, reavalie efeitos nos índices e particionamento.

Erros comuns (e soluções)

“Coluna de partição não está no índice primário”

  • Em muitas versões, a PK precisa incluir a coluna de partição; ajuste a PK antes.

“Intervalos sobrepostos / inválidos”

  • Revise limites de RANGE (sem sobreposição) e mantenha uma partição “aberta” (MAXVALUE) quando fizer sentido.

“Partições demais, ficou lento”

  • Consolide períodos antigos (reorganize/mescle) e reduza o número total de partições.

“Falha ao descartar partição”

  • Cheque FK e bloqueios; garanta backup antes e execute em janela apropriada.

Ferramentas relacionadas

Próximo: MySQL • Manutenção • Voltar: MySQL • Engines