sql >> Databasteknik >  >> RDS >> Mysql

Vilken MySQL-fråga är snabbare?

Du bör alltid använda EXPLAIN för att avgöra hur din fråga kommer att köras.

Tyvärr kommer MySQL att köra din underfråga som en BEROENDE FRÅGA, vilket innebär att underfrågan kommer att köras för varje rad i den yttre frågan. Man skulle kunna tro att MySQL skulle vara smart nog att upptäcka att underfrågan inte är en korrelerad underfråga och skulle köra den bara en gång, tyvärr är den inte så smart än.

Så MySQL kommer att skanna igenom alla rader i eleverna, köra underfrågan för varje rad och inte använda några som helst index på den yttre frågan.

Att skriva frågan som en JOIN skulle tillåta MySQL att använda index, och följande fråga skulle vara det optimala sättet att skriva den:

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

Detta skulle använda följande index:

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


  1. PG::Fel:SELECT DISTINCT, ORDER BY-uttryck måste visas i urvalslistan

  2. Hur ringer man upp Oracle Stored Procedure i Python?

  3. MySQL hitta delsummor

  4. Vad orsakar PDO-fel Kan inte köra frågor medan andra obuffrade frågor är aktiva?