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

Które zapytanie MySQL jest szybsze?

Powinieneś zawsze używać EXPLAIN aby określić, w jaki sposób zostanie uruchomione zapytanie.

Niestety, MySQL wykona Twoje podzapytanie jako ZALEŻNE ZAPYTANIE, co oznacza, że ​​podzapytanie zostanie wykonane dla każdego wiersza w zewnętrznym zapytaniu. Można by pomyśleć, że MySQL byłby wystarczająco sprytny, aby wykryć, że podzapytanie nie jest skorelowanym podzapytaniem i uruchomiłby je tylko raz, niestety, nie jest jeszcze tak sprytne.

Tak więc MySQL przeskanuje wszystkie wiersze uczniów, uruchomi podzapytanie dla każdego wiersza i nie użyje żadnych indeksów w zapytaniu zewnętrznym.

Napisanie zapytania jako JOIN pozwoliłoby MySQL na wykorzystanie indeksów, a następujące zapytanie byłoby optymalnym sposobem na jego napisanie:

SELECT COUNT(*) AS count
FROMstudents s
JOIN classes c
  ON c.id = s.classes_id
  AND c.departments_id = 1
WHERE s.status = 1

To wykorzysta następujące indeksy:

students(`status`)
classes(`id`, `departements_id`) : multi-column index


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. node.js async/await za pomocą MySQL

  2. MySQL, json, JSON_ARRAY_APPEND - dlaczego append nie działa w wersji 5.7.13?

  3. Zamawianie w przedsprzedaży zestawienia GROUP BY

  4. Importowanie pliku sql za pomocą phpmyadmina w EasyPHP

  5. SQL self-join table usuń zduplikowane wiersze