Como usar o EXPLAIN do MySQL para diagnosticar consultas lentas imprimir

  • 0

Como usar o EXPLAIN do MySQL para diagnosticar consultas lentas

Olá! Aqui é a Sensei da GeHost 🧘‍♀️ Se o seu site ou sistema está demorando pra carregar uma página que consulta o banco de dados, muito provavelmente o vilão é uma consulta SQL lenta. E o melhor jeito de descobrir por que ela está lenta é perguntar diretamente pro MySQL: "explica pra mim como você está executando isso?". É exatamente isso que o comando EXPLAIN faz.

Não se preocupe se você não é programador — vou explicar com calma, passo a passo, como se fosse a primeira vez que você olha pra uma tela de banco de dados.

O que é o EXPLAIN, afinal?

Toda vez que o MySQL recebe uma consulta (um SELECT, por exemplo), ele precisa decidir o caminho mais eficiente para buscar os dados: vai ler a tabela inteira? Vai usar algum índice pra ir direto ao ponto? Vai precisar ordenar tudo na memória?

O EXPLAIN é como pedir um "mapa da rota" que o banco vai seguir antes de executar a consulta de verdade. Ele não roda a consulta — só mostra o plano. É uma ferramenta de diagnóstico, gratuita e nativa do próprio MySQL.

Dica da Sensei: pense no EXPLAIN como o GPS do banco de dados. Ele te mostra se o caminho escolhido foi "estrada boa" (usando índice) ou "atalho de terra" (varrendo a tabela inteira linha por linha).

Passo 1 — Acesse o phpMyAdmin

  1. Entre no seu painel de hospedagem (cPanel).
  2. Procure o ícone "phpMyAdmin", geralmente na seção de bancos de dados.
  3. Clique nele — ele abre em uma nova aba e já mostra a lista dos seus bancos de dados à esquerda.

Se você não sabe o usuário/senha do seu banco ou não encontra essa área no painel, dá uma olhada nas informações do seu contrato ou fale com quem desenvolveu o seu site — é comum que só o desenvolvedor tenha esses acessos.

Passo 2 — Identifique a consulta lenta

Antes de usar o EXPLAIN, você precisa saber qual consulta está pesando. Normalmente essa consulta vem:

  • Do código do seu sistema (o desenvolvedor consegue apontar qual comando SQL roda naquela tela lenta);
  • Ou de um log de "slow query" que o próprio sistema/desenvolvedor configurou.

Se você não tem acesso a esse tipo de informação, o ideal é pedir ajuda a quem construiu ou mantém o site — o EXPLAIN é uma ferramenta técnica, então essa etapa costuma envolver um desenvolvedor.

Passo 3 — Rode o EXPLAIN

  1. No phpMyAdmin, clique no banco de dados correto e depois na aba "SQL".
  2. Digite a palavra EXPLAIN na frente da consulta que você quer analisar. Por exemplo:

EXPLAIN SELECT * FROM pedidos WHERE cliente_id = 123;

  1. Clique em "Executar".
  2. O MySQL vai devolver uma tabela com o "raio-x" da consulta — é essa tabela que vamos ler juntos agora.

Passo 4 — Entendendo o resultado (sem susto)

O resultado do EXPLAIN tem várias colunas técnicas, mas você só precisa prestar atenção em quatro delas para já entender 80% do problema:

  • type — mostra o "tipo de busca". Valores como ALL costumam indicar que o MySQL está lendo a tabela inteira, linha por linha (ruim para tabelas grandes). Valores como ref, eq_ref ou const indicam que ele está usando um índice para ir direto ao ponto (bom).
  • possible_keys — quais índices existem que poderiam ser usados nessa consulta.
  • key — qual índice foi de fato usado. Se essa coluna aparecer vazia (NULL) mesmo havendo opções em possible_keys, é um sinal de alerta.
  • rows — uma estimativa de quantas linhas o MySQL precisa examinar. Quanto maior esse número, mais pesada tende a ser a consulta.

Também vale espiar a coluna Extra. Frases como:

  • Using filesort — o banco precisou ordenar os resultados "na mão", fora de um índice (pode pesar em tabelas grandes);
  • Using temporary — o banco criou uma tabela temporária pra processar a consulta (também pode pesar).
Resumo da Sensei: se você ver type = ALL, key = NULL e um número alto em rows, é quase certeza de que essa consulta está "varrendo" a tabela inteira sem ajuda de índice — e é aí que mora a lentidão.

Passo 5 — O que fazer com esse diagnóstico

Depois de identificar o problema, os caminhos mais comuns (que o seu desenvolvedor pode aplicar) são:

  1. Criar um índice na coluna usada no WHERE, JOIN ou ORDER BY da consulta — geralmente é o ganho mais rápido e mais comum.
  2. Revisar a consulta, evitando SELECT * quando só algumas colunas são necessárias, e evitando filtros que impeçam o uso de índices (como funções aplicadas em cima da coluna filtrada).
  3. Revisar o volume de dados — às vezes a tabela cresceu muito e vale pensar em arquivar dados antigos.

Criar ou ajustar índices normalmente é feito direto na estrutura da tabela (via phpMyAdmin, na aba "Estrutura" do banco), mas essa é uma alteração técnica — se você não se sente confortável mexendo nisso sozinho(a), o ideal é envolver um desenvolvedor de confiança para aplicar a mudança com segurança.

Quando pedir ajuda

Se depois de rodar o EXPLAIN você não conseguir interpretar o resultado ou não tiver certeza de qual índice criar, não tem problema nenhum — esse é um assunto técnico mesmo para quem trabalha com isso no dia a dia. Você pode acessar o painel.gehost.com.br para conferir os dados do seu plano e, se precisar de suporte especializado em banco de dados, verificar as condições disponíveis para o seu contrato.

Última dica da Sensei: guarde sempre o resultado do EXPLAIN (um print ou uma cópia do texto) antes de pedir ajuda a alguém — isso acelera muito o diagnóstico de quem for te socorrer! 💛

Esta resposta lhe foi útil?

« Retornar