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

MySQL-Desempenho ao ordenar na coluna calculada


Na verdade, você não pode otimizar essa consulta.

Você está classificando o resultado usando um valor calculado, portanto, não pode usar um índice. Se você usar explain você pode ver como sua consulta está sendo executada e using temporary estará presente no extra coluna, o que significa que todos os dados da sua consulta estão sendo armazenados em uma tabela temporária na qual a ordenação é realizada.

Não importa se você quer apenas as primeiras 50 correspondências na consulta, ela precisa primeiro obter todos os dados, despejá-los em uma tabela temporária, classificar o resultado nessa tabela e depois retornar para você as primeiras 50 correspondências.

Como você pode supor, esta é uma operação que consome tempo e memória.

Então, sua melhor opção é colocar um índice na tabela para obter todas as linhas que você precisa o mais rápido possível e processá-las com php para obter os dados que você precisa.

A propósito, dê uma olhada no guia de otimização do MySQL .