O EXPLAIN mostra o plano que o otimizador escolheu — como ele vai acessar cada tabela — sem executar a consulta. Você o lê para confirmar que índices são usados e que poucas linhas são examinadas.
O EXPLAIN mostra o plano que o otimizador escolheu — como ele vai acessar cada tabela — sem executar a consulta. Você o lê para confirmar que índices são usados e que poucas linhas são examinadas.
const / eq_ref / ref (buscas por índice, bom) → range → index (varredura completa do índice) → ALL (full table scan, o sinal de alerta).NULL = nenhum).Using index (covering, ótimo), Using filesort / Using temporary (ordenação/agrupamento em memória ou em disco — frequentemente otimizável).EXPLAIN SELECT * FROM orders WHERE customer_id = 42 ORDER BY created_at;
-- +------+------+------+---------+--------+----------------+
-- | type | key | rows | Extra |
-- | ALL | NULL | 900k | Using where; Using filesort | <- scans everything, sorts
-- +------+------+------+---------+--------+----------------+
-- Add an index that covers the filter AND the sort order:
CREATE INDEX idx_cust_created ON orders (customer_id, created_at);
EXPLAIN SELECT * FROM orders WHERE customer_id = 42 ORDER BY created_at;
-- | type | key | rows | Extra |
-- | ref | idx_cust_created | 30 | Using where | <- seeks 30 rows, no filesort
O índice transformou uma varredura ALL de 900 mil linhas em um seek ref de 30, e como created_at é a segunda coluna, as linhas saem pré-ordenadas — o filesort desaparece.
Use EXPLAIN ANALYZE (MySQL 8) para ver também tempo e contagem de linhas reais, pegando casos em que a estimativa está errada.
O EXPLAIN é como você substitui adivinhação por evidência. Detectar type: ALL, um rows enorme ou Using filesort diz exatamente onde falta um índice — o caminho mais rápido de "a página está lenta" para uma correção direcionada.
Uma biblioteca de perguntas de entrevista de TI com respostas detalhadas — de Júnior a Sênior.
Doar