Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Truy vấn chậm MySQL bằng cách sử dụng filesort

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Định dạng date () trong PHP khi chèn vào datetime trong MySQL

  2. Bao nhiêu bộ nhớ sẽ bị chiếm bởi một giá trị null trong một DB?

  3. Tổng của cột khi sử dụng mysqli và php

  4. mysql:Cú pháp phù hợp để KHÔNG THÍCH là gì?

  5. Kết quả PDOStatement ::rowCount khi được sử dụng sau PDO ::commit?