Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Permintaan lambat MySQL menggunakan filesort

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara memasukkan data baris tabel dinamis ke dalam database sekaligus

  2. Apa arti tanda tanya di MySQL di kolom WHERE =??

  3. PERBARUI dengan SUM() di MySQL

  4. Bidang datetime MySQL dan waktu musim panas -- bagaimana cara mereferensikan jam tambahan?

  5. Pembaruan MySQL memakan waktu (terlalu) lama