Иногда, если вы можете избежать «Использование временного; Использование файловой сортировки», оно того стоит, хотя я не проводил подробного тестирования.
1 SIMPLE favorites ref source_id,user2_id source_id 3 const 137 Using index; Using temporary; Using filesort
1 SIMPLE users eq_ref PRIMARY,updated PRIMARY 3 apm.favorites.target_id 1 Using where
Вместо того, чтобы просить mysql сортировать по имени, в ruby я делаю
results.sort_by {|u| u.name.downcase}
Результирующий запрос MySQL теперь проще:
1 SIMPLE favorites ref source_id,user2_id source_id 3 const 137 Using index
1 SIMPLE users eq_ref PRIMARY,updated PRIMARY 3 apm.favorites.target_id 1 Using where
Конечно, вы не захотите этого делать, если вы вернули более нескольких сотен строк.