Eu encontrei 2 coisas (mais ou menos óbvias) que ajudaram a acelerar essa consulta a um nível satisfatório:
-
Minimize o número de linhas que precisam ser classificadas. Usando um índice no campo 'id' e uma subseleção para cortar o número de registros primeiro, a classificação do arquivo na coluna computada não é tão ruim. Ou seja:
SELECT t.value1, (t.value2 * an_arbitrary_float) as SCORE FROM (SELECT * FROM sometable WHERE id = 1) AS t ORDER BY SCORE DESC
-
Tente aumentar sort_buffer_size em my.conf para acelerar esses tipos de arquivos.