Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Powolne zapytanie MySQL przy użyciu sortowania plików

Poniższe zapytanie usunie Korzystanie z tymczasowego; Korzystanie z sortowania plików. z wyjaśnień, więc powinno to działać lepiej w thoery..

Optymalizator MySQL jest głupi, więc sztuczka polega na tym, aby zmusić optymalizator, który chcesz, a jest to tabela pochodna oparta na college.college_location =1. Możesz więc połączyć wynik INNER JOIN z tabelą studentów. W ten sposób MySQL może użyć klucza sortowania

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

Zwróć uwagę na nowy indeks w Caps Lock

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

Możesz też użyć tego, jeśli uważasz, że jest to bardziej sensowne lub łatwiejsze do odczytania. Przedstawienie powinno być takie samo, ponieważ wyjaśniono mi, że jest to samo.

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

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

Nowa strategia dziel i rządź Uruchom więcej zapytań do bazy danych, co przyda się poprawnym indeksom. I usuń potrzebę tymczasowej tabeli i sortowania plików.

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
;

zobacz 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. jak przyciąć wiodące zera z tekstu alfanumerycznego w funkcji mysql

  2. Najlepszy sposób na archiwizację bazy danych MySQL na żywo

  3. Funkcje mysql w kreatorze zapytań w laravel

  4. Jak stworzyć indeks w MySQL

  5. Błąd MySQL 1241:Operand powinien zawierać 1 kolumnę (kolumny)