sql >> Database teknologi >  >> RDS >> Mysql

Hvilken MySQL-forespørgsel er hurtigere?

Du bør altid bruge EXPLAIN for at bestemme, hvordan din forespørgsel skal køre.

Desværre vil MySQL udføre din underforespørgsel som en AFHÆNGIG FORESPØRGSEL, hvilket betyder, at underforespørgslen vil blive kørt for hver række i den ydre forespørgsel. Du skulle tro, at MySQL ville være smart nok til at opdage, at underforespørgslen ikke er en korreleret underforespørgsel og ville køre den én gang, desværre er den ikke så smart endnu.

Så MySQL vil scanne gennem alle rækkerne i eleverne, køre underforespørgslen for hver række og ikke bruge nogen som helst indekser på den ydre forespørgsel overhovedet.

At skrive forespørgslen som en JOIN ville give MySQL mulighed for at bruge indekser, og følgende forespørgsel ville være den optimale måde at skrive den på:

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

Dette ville bruge følgende indekser:

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


  1. Ydeevne af MySql Xml-funktioner?

  2. Den vedhæftede database er skrivebeskyttet

  3. Opdater MySQL fra CSV ved hjælp af JAVA

  4. Hvorfor skal jeg bruge fremmednøgle, hvis jeg kan bruge WHERE?