Capítulo 19: OzExplain - Execution Tree e Index Advisor
Informação: Este capítulo explica a conversão de saídas
EXPLAINsuportadas em uma árvore visual de execução de consultas, alertas de divergência entre linhas estimadas e reais, e recomendações de índices. A disponibilidade varia conforme as sondagens de capacidades do servidor.
Neste capítulo:
- 19.1 Árvore de Execução Visual
- 19.2 Comparação de Linhas Estimadas vs Reais
- 19.3 Recomendações de Índices
- Tópicos Relacionados
19.1 Árvore de Execução Visual
Ao selecionar uma consulta de leitura e pressionar Cmd + E, o OzExplain decompõe o plano de execução EXPLAIN em nós visuais coloridos. Ambientes SQLite ou servidores que não suportam o formato solicitado exibem o estado apropriado de indisponibilidade.
- Nós Vermelhos (Gargalos / Bottlenecks): Etapas ineficientes de alto custo, como varreduras completas de tabela (Full Table Scan /
ALL), ordenação em disco (filesort) ou criação de tabelas temporárias em disco (using temporary). - Nós Verdes (Operações Otimizadas): Acessos indexados eficientes utilizando chave primária (
const/eq_ref) ou índices B-Tree bem definidos.
Essa visualização permite identificar instantaneamente em qual operador do plano reside o maior custo da consulta.
19.2 Comparação de Linhas Estimadas vs Reais
Quando o servidor conectado suporta comandos de análise em tempo de execução, o OzExplain compara a estimativa estatística do otimizador com a contagem real de registros processados. No MySQL utiliza-se EXPLAIN ANALYZE; no MariaDB, o formato ANALYZE suportado. O SQLite não possui suporte a EXPLAIN ANALYZE.
Quando a divergência entre estimativa e execução real ultrapassa 3x, o nó emite o seguinte alerta:
ANALYZE TABLE orders; -- Linhas reais (450.000) excedem a estimativa (1.000) em 450x
Dica: Esse alerta indica estatísticas desatualizadas no catálogo do banco, sugerindo a execução imediata de
ANALYZE TABLEpara calibrar o otimizador.
19.3 Recomendações de Índices
Ao detectar uma varredura completa (ALL), o OzExplain sugere a estrutura de índice recomendada para a tabela:
CREATE INDEX idx_orders_opt ON orders (<colunas_filtro>);
Essa diretriz serve como modelo sintático inicial; o SQLOZ não infere de forma autônoma as colunas de predicado nessa visão. Avalie as colunas contra a carga de trabalho real e aplique as alterações via safety gate; índices nunca são criados sem autorização expressa.