Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como otimizar consultas MySQL com base no plano EXPLAIN


Depende do que você está procurando e qual é a consulta.

Geralmente, para cada linha em EXPLAIN que tem um Using where , você precisa tê-lo usando um índice (possible keys e keys coluna). Estes são seus filtros e incluem WHERE e ON. Dizendo Using index é ainda melhor. Isso significa que há um índice de cobertura e o MySQL pode recuperar os dados diretamente do índice em vez de visitar a linha nos dados da tabela.

As linhas onde não há Using where , e está retornando um grande número de linhas devem ser examinadas. Eles estão retornando valores para todas as linhas da tabela. Eu não sei qual é a sua pergunta, então não sei se devo ficar alarmado aqui. Tente filtrar o conjunto de resultados para reduzir o tamanho e melhorar o desempenho.

Você geralmente deve tentar evitar ver Using filesort ou Using temporary , embora esses sejam apenas ruins se você não os estiver esperando.

Filesort geralmente aparece com a cláusula ORDER. Você geralmente quer que o MySQL use um índice de cobertura (Using index ) para que as linhas sejam retornadas já em ordem do servidor. Se não estiverem, o MySQL deve solicitá-los posteriormente, usando filesort.

Using temporary pode ser ruim quando se refere a tabelas derivadas porque elas não possuem índices. Parece que você criou explicitamente uma tabela temporária com índices, então aqui, não é ruim. Às vezes, sua única opção é usar uma tabela derivada e, portanto, Using temporary .