sql >> Database >  >> RDS >> Mysql

Welke MySQL-query is sneller?

Gebruik altijd EXPLAIN om te bepalen hoe uw zoekopdracht wordt uitgevoerd.

Helaas zal MySQL uw subquery uitvoeren als een DEPENDENT QUERY, wat betekent dat de subquery voor elke rij in de buitenste query wordt uitgevoerd. Je zou denken dat MySQL slim genoeg zou zijn om te detecteren dat de subquery geen gecorreleerde subquery is en het maar één keer zou uitvoeren, helaas is het nog niet zo slim.

MySQL scant dus alle rijen in studenten, voert de subquery voor elke rij uit en gebruikt geen enkele index op de buitenste query.

Door de query als een JOIN te schrijven, kan MySQL indexen gebruiken, en de volgende query zou de optimale manier zijn om deze te schrijven:

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

Dit zou de volgende indexen gebruiken:

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


  1. MySQLdb met meerdere transacties per verbinding

  2. Waarom behandelt Oracle 9i een lege string als NULL?

  3. MySQL InnoDB Storage Engine-ondersteuning inschakelen in XAMPP-installatie

  4. Filter rijen in een kolom op basis van ingestelde regels in SQL