Truy vấn bên dưới sẽ loại bỏ Sử dụng tạm thời; Sử dụng tệp tin. khỏi giải thích vì vậy điều này sẽ chạy tốt hơn trong thoery ..
Trình tối ưu hóa MySQL khá ngu ngốc vì vậy mẹo là buộc trình tối ưu hóa muốn bạn muốn và đó là một bảng dẫn xuất dựa trên college.college_location =1. Vì vậy, bạn có thể INNER THAM GIA kết quả với bảng sinh viên Và bằng cách này MySQL có thể sử dụng khóa sắp xếp
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
Lưu ý chỉ mục mới trong khóa mũ
Xem bản trình diễn http://sqlfiddle.com/#!2/05c8a/1
Hoặc bạn có thể sử dụng điều này nếu bạn nghĩ nó có ý nghĩa hơn hoặc dễ đọc hơn. Hiệu suất phải giống nhau vì phần giải thích đã giải thích cho tôi rằng nó giống nhau.
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
xem bản trình diễn http://sqlfiddle.com/#!2/05c8a/23
Phương pháp phân chia và chinh phục chiến lược mới Kích hoạt nhiều truy vấn hơn đến cơ sở dữ liệu, những gì sẽ sử dụng các chỉ mục chính xác. Và loại bỏ nhu cầu về bảng tạm thời và sắp xếp tệp.
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
;
xem bản trình diễn http://sqlfiddle.com/#!2/454b3/61