Revisar planos MySQL EXPLAIN e caminhos de acesso

Cole um plano já obtido do MySQL: FORMAT=JSON, uma árvore de EXPLAIN ANALYZE ou a tabela copiada do console. A página lista o tipo de acesso, a chave selecionada e as linhas estimadas de cada tabela, e aponta varreduras completas, tabelas temporárias e filesort. Nada é enviado ao banco e nenhuma consulta é executada.

Funciona localmente no seu navegador
Tudo é processado no seu navegador; nada é enviado.
Saída do MySQL EXPLAINCole um EXPLAIN FORMAT=JSON, uma árvore de EXPLAIN ANALYZE, um resultado separado por tabulações ou a tabela do console MySQL.
Entrada JSON, tabela ou árvoreEstimativas precisam de contexto de produçãoSem conexão com banco de dados

Esta é uma revisão somente leitura. Ela nunca executa uma consulta nem envia SQL ao MySQL.

Linhas de acesso
Ainda não há linhas de acesso para mostrar.

Como ler um plano do MySQL a partir da saída do EXPLAIN

Cole um plano que você já tenha do MySQL: a saída FORMAT=JSON, uma árvore de EXPLAIN ANALYZE ou a tabela do console do cliente mysql. A página lista cada tabela encontrada com o tipo de acesso, a chave selecionada e as linhas estimadas, e aponta varreduras completas de tabela, tabelas temporárias e filesort. Tudo roda no navegador: nenhuma consulta é executada e nada é enviado a um banco de dados.

O analisador lê as três formas que o próprio MySQL imprime e não inventa números: quando o plano não traz estimativa de linhas, a coluna mostra — em vez de 0. As estimativas vêm das estatísticas do servidor, então são a aposta do planejador, não uma medição da consulta.

  1. Rode EXPLAIN no MySQL e copie o resultado completo: EXPLAIN FORMAT=JSON para o plano JSON, EXPLAIN ANALYZE ou EXPLAIN FORMAT=TREE para a árvore, ou a tabela simples do EXPLAIN no console.
  2. Cole no campo e clique em Analisar localmente. Carregar exemplo preenche o campo com um plano JSON de duas tabelas que mantém uma subconsulta dentro do objeto table.
  3. Leia primeiro os cinco contadores: linhas de acesso, linhas estimadas, varreduras completas, acessos com chave e varreduras de índice.
  4. Percorra os achados: acesso ALL, varredura completa de índice, tabela temporária, filesort e resultados intermediários aparecem nomeados com a tabela a que pertencem.
  5. Confira na tabela abaixo a chave selecionada e a coluna extra (chaves possíveis, buffer de junção, condição anexada) e clique em Copiar para levar o relatório a um chamado antes de mudar um índice.

O que o analisador informa e o que ele não vê

Linhas, chaves e o que os contadores significam

Linhas de acesso conta as entradas de tabela que o analisador encontrou no plano, não as linhas que a consulta percorre; cada entrada é uma linha da tabela abaixo. Linhas estimadas soma os valores rows_examined_per_scan (ou rows) que consegue ler e mostra — quando nenhuma entrada traz um número. Varreduras completas conta o tipo de acesso ALL, varreduras de índice conta INDEX e acessos com chave conta as entradas em que uma chave foi realmente escolhida.

A tabela mantém a terminologia do plano: tipo de acesso, chave selecionada, filtrado e uma coluna extra que nomeia as chaves possíveis quando nenhuma foi escolhida, o buffer de junção ou a condição anexada. possible_keys é uma lista de candidatas, não um índice escolhido, então nunca aparece na coluna da chave selecionada.

Saída JSON, árvore e console

O MySQL 8 guarda subconsultas e views materializadas dentro do objeto table (attached_subqueries, materialized_from_subquery). O analisador desce até elas, então uma tabela interna aparece como linha própria, e uma autojunção que varre a mesma tabela duas vezes é informada duas vezes em vez de ser colapsada.

A saída em árvore do EXPLAIN ANALYZE é lida linha a linha (Table scan, Index scan, Index range scan, Index lookup…), e quando a árvore traz linhas reais a página as mostra ao lado da estimativa. A saída de console é lida em colunas separadas por tabulação ou barra, então a tabela do cliente mysql pode ser colada como está. Planos com mais de 250 linhas de acesso são cortados na linha 250 e o relatório avisa.

Limites: um plano, um momento

A página não consegue conectar ao MySQL: não executa a consulta, não vê o esquema nem as estatísticas e não sabe se o servidor ainda escolheria esse plano. Um plano obtido sem ANALYZE traz apenas estimativas, e um plano de outra versão do MySQL pode nomear chaves ou tipos de acesso que esta página não conhece.

Nada fica em cache entre análises: uma nova substitui contadores, achados, tabela e relatório anteriores, e um texto que não seja um plano EXPLAIN limpa os painéis em vez de deixar um relatório antigo que Copiar poderia entregar. O relatório repete o formato, os contadores e todos os achados, então as notas viajam com os números.

Ferramentas recentes: