🧭 Como Ler o EXPLAIN Sem Sofrer — Um Guia Prático e Descomplicado

Quem mexe com MySQL ja ouviu falar aquela famosa frase de clientes:

“Nossa, como esta consulta onera meu ambiente em todas as vezes que executo-a”

Nós DBA’s sabemos que na maioria destes cenários a query tá lenta e ninguém quer admitir que o problema é dela.
É aí que entra o EXPLAIN, aquela ferramenta que parece complicada, mas na real só quer te mostrar como o MySQL pretende executar a consulta a respeito.

Sendo, irei apresentar como interpretar melhor seu Explain.

 
📌O que é o Explain (de verdade) ?
O explain mostra o plano de execução da sua query –> ou seja, o caminho que o MySQL vai seguir para buscar os dados.
 
Você entende nele.
  • Se a query está usando índices.
  • Se está fazendo Full Scan na tabela.
  • Se existem filtros ruins.
  • Se a junção entre as tabelas está eficiente.

E o melhor…. não executa a query, só mostrará o plano real.

 
🧱 Estrutura básica do Explain.
Quando rodamos algo como:

Ele te entregará colunas como:

  • Id –> Ordem do processamento da query.
  • Select_type –> Tipo da consulta (simple, subquery, derived etc..).
  • Table –> Tabela sendo lida.
  • Type –> Qualidade do acesso (All, index, ref, const,eq_ref).
  • Possible_keys –> Índices possíveis.
  • Key –> Índice realmente usado.
  • Rows –> Estimativa de linhas que serão lidas.
  • Filtered –> Percentual de filtragem (%).
  • Extra –> Detalhes importantes (Using index, filesort, temporary).

 

🚨 Coluna type (a mais importante para quem esta começando).
 
Abaixo, compartilharei uma tabelinha para entendimentos desta coluna + retornos possíveis.
 
Type Significado
All Full table scan (ruim na maioria dos casos)
Index Scan do índice inteiro
Range Busca por intervalo (bom)
Ref Uso de índice com igualdade (muito bom)
Eq_ref Melhor forma para JOINs
Const / System O MySQL sabe exatamente o registro (excelente)

Os conceitos resumidamente foram compartilhados acima, agora é hora de por a mão na massa…. ou melhor, mão nos dados!

 

🧪 Na prática, vamos entender como funcionará o Explain.
 
  • Criação de base + tabela para nossa DEMO.

  • Após realizarmos a população de registros na tabela, vamos executar um explain e entendermos na sequência seus resultados.

Vemos que, a consulta está realizando um full_scan, seguindo a condição imposta no Where.

 

  • Vemos que não temos chaves (indices) a serem utilizados, então vamos criar o indice correto para esta consulta.

Agora sim, após a criação do índice podemos notar a melhoria em questão. 
As colunas type + key informando as condições sendo utilizadas.

 

  • Outro cenário clássico, é a junção de 2 tabelas para o retorno de informações complementares.

No mesmo conceito dos “demos” anteriores, vemos 2 tabelas agora realizando um junção de informações.

 

  • Assim, usaremos a mesma análise anteriormente.

Criando o indice adequado, vemos uma melhoria no tipo acesso para as tabelas, JOIN usando o índice correto e menos linhas para consultar.

Óbviamente que nesta demo, mostrei a todos conceitos simples dos planos de execuções e 2 formato diferentes.

 

🚀 O que atentar-se para a coluna Extra.
 
No mesmo formato da tabelinha para coluna Type, temos também a explicação para a coluna Extra.
 
a { text-decoration: none; color: #464feb; } tr th, tr td { border: 1px solid #e6e6e6; } tr th { background-color: #f5f5f5; }
Extra Significado
Using index A query leu tudo pelo índice (ótimo)
Using where Houve filtragem (ok)
Using temporary MySQL criou tabela temporária (pode ser ruim)
Using filesort Houve ordenação fora do índice (pode ser ruim)

Se na maioria das vezes identificarmos Using temporary + Filesort, quase haverá melhorias a serem realizads.

 
🎁 Dica DBA
 
  • Foque em type, key, rows e Extra.
  • Se o MySQL não escolhe seu índice, muitas vezes faltam estatísticas.
  • Queries lentes SEMPRE têm um motivo –> relaxa, Explain mostrará o caminho.
  • Não se assuste com o tamanho do plano: comece pela pior linha (maior rows + type ruim).

 

 

Referências.

https://dev.mysql.com/doc/refman/8.4/en/explain-output.html

https://dev.to/amitiwary999/get-useful-information-from-mysql-explain-2i97

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