Kueri di bawah ini akan menghapus Menggunakan sementara; Menggunakan filesort. dari penjelasannya jadi ini harus berjalan lebih baik di thoery..
Pengoptimal MySQL bodoh jadi triknya adalah memaksa pengoptimal yang Anda inginkan dan itu adalah tabel turunan berdasarkan college.college_location =1.Jadi Anda bisa INNER JOIN hasilnya dengan tabel siswa. Dan dengan cara ini MySQL dapat menggunakan kunci sortir
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
Perhatikan indeks baru di caps lock
Lihat demo http://sqlfiddle.com/#!2/05c8a/1
Atau Anda dapat menggunakan ini jika menurut Anda lebih masuk akal atau lebih mudah dibaca. Performanya harus sama karena penjelasannya menjelaskan kepada saya bahwa itu sama.
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
lihat demo http://sqlfiddle.com/#!2/05c8a/23
Metode pembagian dan penaklukan strategi baru Jalankan lebih banyak kueri ke database yang akan menggunakan indeks yang benar. Dan hilangkan kebutuhan akan tabel dan pengurutan file sementara.
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
;
lihat demo http://sqlfiddle.com/#!2/454b3/61