Nos últimos anos, um termo tem chamado atenção cada vez mais com certa frequência…. a evolução do MySQL Hypergraph Optimizer.
A promessa é um otimizador mais moderno, capaz de avaliar planos mais complexo, especialmente em consultas com múlltiplos JOINs, algo que sempre foi um ponto sensível no MySQL.
Quando pesquisei um pouco sobre, fui direto ao ponto que todo DBA vai naturalmente tentar fazer:
“Legal, como ativar isto?”
E é exatamente aqui que começa a “frustação”, e o motivo deste post.
Neste blog, vou contar de onde vem o Hypergraph Optimizer, o que as documentações sugerem, e principalmente…. Porque na prática em ambiente Produtivos você não consegue ativá-lo via SET, idependente da versão do MySQL.
Antes do Hypergraph: o otimizador clássico do MySQL.
- Cardinalidade estimada.
- Estatísticas de índices.
- Ordem de JOINs.
- O número de tabelas cresce
- Os JOINs se tornam mais complexos
- Existem múltiplos caminhos possíveis para o mesmo resultado
O problema central disto é que o plano de busca crescerá exponencial, e o otimizador clássico precisa aplicar heurísticas.
O que é o Hypergraph Optimizer.
O conceito é simples e claro:
- Cada tabela vira um nó.
- Cada JOIN vira uma hiper-aresta.
- O plano de execução passa a ser avaliado como problema grafo, e não mais como uma sequência linear.
Permitindo que o otimizador:
- Avalie mais combinações válidas de JOIN
- Compare custos de forma mais global
- Não dependa tanto da ordem em que o SQL foi escrito
Isto é a teoria, e vemos que representa um salto enorme em capacidade de otimização.
Porém, na prática…. vamos demonstrar.
O mais óbvio: “vamos liga via SET”.
A primeira coisa que fiz foi verificar o estado atual do otimizador:
|
1 |
SELECT @@optimizer_switch; |
Como esperado, uma lista com diversas FLAGS relacionadas a otimizações.
O passo seguinte é quase automático para qualquer um que já mexeu com MySQL.
|
1 |
SET optimizer_switch='hypergraph_optimizer=on'; |
E aqui vem o ponto deste post:
No MySQL 8.0.43, em builds padrão, o Hypergraph Optimizer permanece OFF por padrão e não pode ser efetivamente ativado via SET.
Teste prático (via sysbench).
Para demonstrar que eu não estou tirando conclusões preciptadas, usei minha base de teste (conhecida por muitos):
Sysbench com aproximadamente 1 milhão de registros e indices padrões.
Resultado???
- Plano simples.
- Uso de indice esperado.
- Custo coerente.
E claro, nenhum vínculo relacionado ao Hypergraph, pois não temos como ativá-lo neste ambiente.
Mas então, o Hypergraph não existe?
Essa é uma pergunta muito comum, e a resposta é não.
Isso explica por que:
- Não existe uma flag funcional via SET
- A documentação parece sempre incompleta no uso prático
- Os testes em ambientes reais não mostram diferenças claras
E isso não é limitação do DBA, nem falta de conhecimento… é uma decisão de implementação.
E o MySQL 9, onde o hypergraph entra nesta história?
Até aqui, todo o contexto do blog foi baseado em MySQL 8.X em builds padrões, exatamente o cenário mais comum em Produção e HML hoje.
Neste contexto, o Hypergraph existe no código, mas não é explorável nem observável via configuração simples.
A partir do MySQL 9, no entanto, esse cenário começa a mudar.
Em versões mais recentes e em ambiente específicos (como MySQL Heatwave), o hypergraph passa a ser ativo de forma experimental, permitindo sim, observar diferenças reais nos planos de execução sem a necessidade de compilar um MySQL em modo DEBUG.
E reforço apenas dois pontos:
- Isso não muda a realidade de quem está em MySQL 8 em produção.
- E não transforma o Hypergraph em uma feature “plug and play”.
O que muda é que, a partir do MySQL 9, começamos a ter um caminho intermediário, onde é possível testar o Hypergraph em laboratório, comparar planos e entender melhor seu impacto, ainda de forma controlada
Desfecho.
Se você está usando o MySQL 8.0.x em ambientes padrões (PROD) e:
- Tentou ativiar o via SET.
- Comparou planos e não viu diferença.
- Acho que esta “configurando errado”.
O que te digo é:
Você não está fazendo absolutamente nada de errado.
Neste primeiro BLOG sobre o assunto, quis deixar claro apenas:
- O hypergraph fica OFF por padrão.
- Ele não pode ser testado via SET.
- Os teste iniciais só refletem o comportamente do otimizador clássico.
- Em versões como MySQL 9 ou Heatwave à possibilidade de uso.
No próximo BLOG, vamos sair do escopo das queries simples e entrar onde ele deveria fazer a diferença: Queries com múltiplos JOINs, custo de plano, e porque mesmo nestas condições os resultados são limitados em Produção.







