MySQL Hypergraph Optimizer: JOINs Complexos e os Limites do Otimizador em Produção

No primeiro artigo desta série, eu mostrei de onde surgiu o MySQL Hypergraph Optimizer e, principalmente, por que não é possível ativá‑lo via SET em ambientes padrão, mesmo utilizando versões recentes como o MySQL 8.0.43. (Apenas em versões como HeatWave e MySQL 9).

Neste segundo blog, iremos avançar com mais um aprendizado.
Aqui, a pergunta não é mais “como iremos ligar o Hypergraph”, vimos que em ambiente PRODUTIVOS não é possível.
 
A pergunta agora é:
“Onde o hypergraph Optimizer realmente faria a diferença”.
 

Ambiente e premissas.

Para manter total coerência ao post anterior, os testes descritos na sequência foram realizados no seguinte cenário:

  • MySQL 8.0.43
  • Buil padrão (não debug).
  • Ambiente homologação (HML).
  • Hypergraph desativo por default.

Sendo um cenário mais parecido com a maioria dos ambientes MySQL atuais.

 

Onde o Hypergraph deveria fazer diferença.

Se consideramos apenas a teoria, o Hypergraph foi pensado exatamente para situações como:

  • Queries com múltiplos JOINs.
  • Diferentes ordenações.
  • Impacto na decisão inicial para o custo final.
  • Casos onde o otimizador clássico precisaria “podar” o espaço de busca.

Em resumo:
JOINs complexos são o “habitat” natural do Hypergraph Optimizer.

E será exatamente este tipo de consulta que iremos demonstrar neste post.

 

Construindo queries mais agressivas.

Lembrando que neste post, seguiremos utilizando nossa base Sysbench, com o uso na tabela SBTEST1 cotendo aproximadamente 1 milhão de registros.

Para aproximarmos de um cenário mais realista, e comúm em alguns sistemas, utilizei o “auto-joins” algo frequente visto em:

  • Relatórios complexo.
  • Queries mais analíticas.

Exemplo:

Essa query já apresenta várias características importantes com:

  • Múltiplos caminhos válidos de execução
  • Forte dependência de cardinalidade
  • Impacto direto da ordem dos JOINs

Sendo assim, esta é uma querie exata onde o otimizador hypergraph deveria entregar planos melhores.

 

Reescrevendo a query: a ordem ainda importa!!

Um compartamento muito comum entre DBA’s é a tentativa de “ajudar” o otimizador clássico reescrevendo a consulta. (Obs: a alguns post atrás, trouxe alguns exemplos).

Por exemplo, alterando a ordem do JOINs:

 

Se o hypergraph estivesse ativo, a ordem escrita no SQL deveria importar muito menos, ja que o plano seria avaliado de forma global.

Na prática, no MySQL 8.0.43 em build padrões, o que notei foi:

  • Mudanças claras no plano de execução.
  • Diferenças no custo estimado.
  • Decisões fortemente influenciadas pela ordem e pelos filtros.

Deixando um reforço crucial:

“Em ambientes reais, o otimizador clássico ainda toma decisões majoritariamente locais, não globais.”

O papel da cardinalidade e das estatísticas.

Durante os testes demonstrados, executei também o ANALYZE TABLE e os efeitos que tive:

  • Algumas estimativas melhoraram.
  • Alguns planos tiveram mais estabilidade.
  • E algumas mudanças no custo estimado.

Mas o importante é:

Estatísticas corretas ajudam, mas não mudam o modelo de decisão do otimizador.

Mesmo com estatísticas atualizadas, o MySQL continua limitado a:

  • Reduzir o espaço de busca
  • Evitar avaliar combinações mais complexas

E isto que vimos, não é um BUG…. é apenas uma consequência direta do modelo clássico de otimização.

Indo além, utilizando o MySQL 9.7.

A partir das versões mais recentes do MySQL 9, a Oracle começou a introduzir versões Early Access, voltadas exclusivamente para testes e feedback da comunidade. Nesses builds, o Hypergraph Optimizer passa a estar disponível de forma experimental, permitindo observar seu comportamento fora de um build DEBUG.

Para este laboratório, utilizei o MySQL 9.7.0 ER2 em modo isolado, garantindo que os testes não impactassem ambientes existentes. A base de dados utilizada foi a mesma dos testes anteriores, mantendo consistência nos resultados.
 

Ativando o Hypergraph via SET -> MySQL 9.7.

Aqui entra o comando-chave (que não funcionava antes)…. rsrsrs:

Agora, utilizando as mesmas queries anteriores, como a feature desativa e ativada.

Off:

On:

 

 

 

 

 

 

 

 

 

 

O que começa mudar utilizando a nova versão 9.7.

Aqui é muito importante manter sobriedade técnica:

Mesmo utilizando exatamente os mesmos dados e consultas, algumas diferenças começam a surgir no MySQL 9.7 com o Hypergraph ativado:

  • A ordem escrita dos JOINs passa a ter menos impacto direto no plano final
  • O planejamento se torna mais estável entre reescritas da mesma query
  • O otimizador passa a avaliar a consulta de forma mais global, e não apenas por decisões locais encadeadas

Mas, galera lembre-se:

O MySQL 9.7 utilizado aqui é um build Early Access, destinado apenas a testes e feedback. O Hypergraph Optimizer ainda não elimina a necessidade de índices corretos, estatísticas atualizadas ou boa modelagem de dados, ele apenas muda a forma como os planos são avaliados.

Conclusão.

No blog 1, mostrei a todos o porque não conseguimos ativar o Hypergraph Optimizer no MySQL 8.0.43. Porém, para features mais recentes existe a possibilidade do USO da váriavel (Heatwave e MySQL 9.7).
Neste blog, dei continuidade trazendo a todos, onde de fato o otimizador faria a diferença, e como na prática ainda estamos presos as decisões do otimizador clássico em ambiente REAIS, mas futuramente com a vinda do MySQL 9.7 o cenário mudará.

No próximo blog e o último desta série, vamos sair dos ambientes padrões e entra no MySQL Debug. E mostrarei o Hypergraph em ação.
Como os planos são avaliados e porque ele apresenta uma evolução no futuro do MySQL.

COMPARTILHE:
Picture of Henrique Borba Garcia

Henrique Borba Garcia

Iniciei meus estudos na área de Desenvolvimento no ano de 2021. Atualmente, em MySQL tenho uma experiência de 5 anos, e com bancos não relacionais (MongoDB) 2 anos. Desempenho o papel de LÍDER TÉCNICO para ambas as técnologias. Sou bastante persistente e proativo em diversos assuntos em banco de dados. Minhas certificações. . MySQL 2025 Solution Enginner Specialist Assessment. . MySQL Database Administrator 8.0 . MySQL Database Developer 8.0 . OCI Foundations 2021, 2022, 2023, e 2024. . MySQL Database Service . MySQL Explorer. . SQL Explorer. . Oracle Cloud Data Management 2023
Picture of Henrique Borba Garcia

Henrique Borba Garcia

Iniciei meus estudos na área de Desenvolvimento no ano de 2021. Atualmente, em MySQL tenho uma experiência de 5 anos, e com bancos não relacionais (MongoDB) 2 anos. Desempenho o papel de LÍDER TÉCNICO para ambas as técnologias. Sou bastante persistente e proativo em diversos assuntos em banco de dados. Minhas certificações. . MySQL 2025 Solution Enginner Specialist Assessment. . MySQL Database Administrator 8.0 . MySQL Database Developer 8.0 . OCI Foundations 2021, 2022, 2023, e 2024. . MySQL Database Service . MySQL Explorer. . SQL Explorer. . Oracle Cloud Data Management 2023

PARTICIPE

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

POSTADO POR
Picture of Henrique Borba Garcia

Henrique Borba Garcia

Iniciei meus estudos na área de Desenvolvimento no ano de 2021. Atualmente, em MySQL tenho uma experiência de 5 anos, e com bancos não relacionais (MongoDB) 2 anos. Desempenho o papel de LÍDER TÉCNICO para ambas as técnologias. Sou bastante persistente e proativo em diversos assuntos em banco de dados. Minhas certificações. . MySQL 2025 Solution Enginner Specialist Assessment. . MySQL Database Administrator 8.0 . MySQL Database Developer 8.0 . OCI Foundations 2021, 2022, 2023, e 2024. . MySQL Database Service . MySQL Explorer. . SQL Explorer. . Oracle Cloud Data Management 2023
PARCEIROS