La consulta a continuación eliminará el Uso temporal; Uso de clasificación de archivos. de la explicación, así que esto debería funcionar mejor en thoery..
El optimizador de MySQL es tonto, por lo que el truco es forzar el optimizador que desee y esa es una tabla derivada basada en college.college_location =1. Entonces puede INNER JOIN el resultado con la tabla de estudiantes. Y de esta manera MySQL puede usar la clave de ordenación
SELECT
*
FROM
student
INNER JOIN (
SELECT
college_id
FROM
college
WHERE
college.college_location = 1
) college
ON student.student_college = college.college_id
ORDER BY
student.countup DESC
, student.updated_time DESC
Observe el nuevo índice en mayúsculas
Ver demostración http://sqlfiddle.com/#!2/05c8a/1
O puede usar esto si cree que tiene más sentido o es más fácil de leer. El rendimiento debería ser el mismo porque la explicación me explicó que es lo mismo.
SELECT
*
FROM (
SELECT
college_id
FROM
college
WHERE
college.college_location = 1
)
college
INNER JOIN
student
ON
student.student_college = college.college_id
ORDER BY
student.countup DESC
, student.updated_time DESC
ver demostración http://sqlfiddle.com/#!2/05c8a/23
Nueva estrategia divide y vencerás método Realice más consultas a la base de datos, lo que hará uso de los índices correctos. Y elimine la necesidad de una tabla temporal y clasificación de archivos.
SET @college_ids = NULL;
SELECT
GROUP_CONCAT(college_id)
FROM
college
WHERE
college_location = 1
GROUP BY
college_location ASC
INTO @college_ids;
SELECT
*
FROM
student
WHERE
student.student_college IN(@college_ids)
ORDER BY
student.countup DESC
, student.updated_time DESC
;
ver demostración http://sqlfiddle.com/#!2/454b3/61