sql >> Database >  >> RDS >> Mysql

MySQL trage zoekopdracht met filesort

De onderstaande query zal het gebruik van tijdelijk verwijderen; Filesort gebruiken. uit de uitleg dus dit zou beter moeten lopen in thoery..

MySQL-optimizer is dom, dus de truc is om de optimizer te forceren die je wilt en dat is een afgeleide tabel op basis van college.college_location =1.Dus je kunt INNER JOIN het resultaat met de studententabel. En op deze manier kan MySQL de sorteersleutel gebruiken

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

Let op de nieuwe index in caps lock

Zie demo http://sqlfiddle.com/#!2/05c8a/1

Of je kunt dit gebruiken als je denkt dat het logischer is of gemakkelijker te lezen is. De uitvoering zou hetzelfde moeten zijn omdat de uitleg me uitlegde dat het hetzelfde is.

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

zie demo http://sqlfiddle.com/#!2/05c8a/23

Nieuwe strategie verdeel en heers methode Vuur meer query's naar de database af, waardoor de juiste indexen worden gebruikt. En verwijder de noodzaak voor een tijdelijke tabel en bestandssortering.

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
;

zie demo http://sqlfiddle.com/#!2/454b3/61



  1. Wat is de minimale klantvoetafdruk die nodig is om C# te verbinden met een Oracle-database?

  2. Hoe te zoeken in een json-veld dat een reeks objecten bevat met Eloquent

  3. Hoe maak je een externe sleutel met ON UPDATE CASCADE op Oracle?

  4. ORA-00904:ongeldige identifier in dit geval