Palavra-chave MySQL EXPLAIN
A palavra-chave `EXPLAIN` no MySQL é usada para obter informações sobre como uma instrução `SELECT`, `INSERT`, `UPDATE` ou `DELETE` é executada. Ele fornece insights sobre o plano de execução da consulta, ajudando os desenvolvedores a otimizar as consultas ao banco de dados.
Uso
A palavra-chave `EXPLAIN` é usada principalmente para diagnosticar e otimizar consultas SQL, mostrando detalhes como varreduras de tabelas e uso de índices. Ele é colocado antes de uma consulta para revelar a estratégia de execução que o MySQL usará.
EXPLAIN SELECT column1, column2, ...
FROM table_name
[WHERE condition];
Nessa sintaxe, `EXPLAIN` precede uma consulta SQL para exibir detalhes sobre como o MySQL planeja executá-la. Para consultas que não sejam do tipo `SELECT`, recomenda-se `EXPLAIN FORMAT=JSON` para que você tenha informações detalhadas.
Exemplos
1. EXPLAIN básico em uma consulta SELECT
EXPLAIN SELECT * FROM orders;
Esse exemplo fornece detalhes de execução, como o tipo de união ou uso de índice, para que você recupere todas as colunas da tabela `orders`.
2. EXPLAIN com a cláusula WHERE
EXPLAIN SELECT first_name FROM employees WHERE department_id = 5;
Aqui, `EXPLAIN` ajuda a identificar como o desempenho da consulta é influenciado pela cláusula `WHERE`, como a utilização do índice para filtragem.
3. EXPLAIN com JOIN
EXPLAIN SELECT o.order_id, c.customer_name
FROM orders o
JOIN customers c ON o.customer_id = c.customer_id
WHERE c.city = 'New York';
Este exemplo analisa uma operação `JOIN`, fornecendo informações sobre como as tabelas são vinculadas e filtradas pela condição `WHERE`.
4. EXPLAIN com INSERT, UPDATE ou DELETE
Para instruções que não sejam `SELECT`, use `EXPLAIN FORMAT=JSON` para obter informações detalhadas:
EXPLAIN FORMAT=JSON INSERT INTO archive SELECT * FROM orders WHERE order_date < '2023-01-01';
EXPLAIN FORMAT=JSON UPDATE employees SET salary = salary * 1.1 WHERE department_id = 5;
EXPLAIN FORMAT=JSON DELETE FROM orders WHERE status = 'canceled';
Colunas de saída comuns do EXPLAIN
- id: O identificador do SELECT em uma consulta.
- select_type: O tipo de SELECT, como SIMPLE ou PRIMARY.
- mesa: O nome da tabela à qual a linha de saída se refere.
- tipo: O tipo de união.
- possible_keys: Os possíveis índices que o MySQL pode escolher.
- chave: O índice real que o MySQL decidiu usar.
- key_len: O comprimento da chave usada.
- ref: As colunas ou constantes comparadas com o índice.
- linhas: A estimativa de linhas examinadas.
- Extra: Informações adicionais.
Dicas e práticas recomendadas
- Verifique regularmente as consultas complexas. Use o `EXPLAIN` para analisar e otimizar consultas complexas para melhorar o desempenho.
- Combine com `ANALYZE`. Use `ANALYZE TABLE` para atualizar as estatísticas do índice e obter resultados mais precisos do `EXPLAIN`.
- Entenda as colunas de saída. Familiarize-se com as colunas de saída `EXPLAIN` para interpretar as informações de desempenho de forma eficaz.
- Otimize com base nos resultados. Ajuste os índices, reescreva as consultas ou redesenhe os esquemas usando os insights do `EXPLAIN` para obter eficiência.
- Use `EXPLAIN EXTENDED` ou `EXPLAIN FORMAT=JSON` para obter uma análise mais detalhada e adaptar as otimizações a casos de uso específicos.