Ho trovato 2 cose (piuttosto ovvie) che hanno contribuito a velocizzare questa query fino a un livello soddisfacente:
-
Ridurre al minimo il numero di righe che devono essere ordinate. Usando un indice nel campo "id" e una sottoselezione per tagliare prima il numero di record, l'ordinamento dei file sulla colonna calcolata non è così male. Cioè:
SELECT t.value1, (t.value2 * an_arbitrary_float) as SCORE FROM (SELECT * FROM sometable WHERE id = 1) AS t ORDER BY SCORE DESC
-
Prova ad aumentare sort_buffer_size in my.conf per velocizzare questi tipi di file.