Poniższe zapytanie usunie Korzystanie z tymczasowego; Korzystanie z sortowania plików. z wyjaśnień, więc powinno to działać lepiej w thoery..
Optymalizator MySQL jest głupi, więc sztuczka polega na tym, aby zmusić optymalizator, który chcesz, a jest to tabela pochodna oparta na college.college_location =1. Możesz więc połączyć wynik INNER JOIN z tabelą studentów. W ten sposób MySQL może użyć klucza sortowania
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
Zwróć uwagę na nowy indeks w Caps Lock
Zobacz demo http://sqlfiddle.com/#!2/05c8a/1
Możesz też użyć tego, jeśli uważasz, że jest to bardziej sensowne lub łatwiejsze do odczytania. Przedstawienie powinno być takie samo, ponieważ wyjaśniono mi, że jest to samo.
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
zobacz demo http://sqlfiddle.com/#!2/05c8a/23
Nowa strategia dziel i rządź Uruchom więcej zapytań do bazy danych, co przyda się poprawnym indeksom. I usuń potrzebę tymczasowej tabeli i sortowania plików.
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
;
zobacz demo http://sqlfiddle.com/#!2/454b3/61