Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Qual consulta MySQL é mais rápida?


Você deve sempre usar EXPLAIN para determinar como sua consulta será executada.

Infelizmente, o MySQL executará sua subconsulta como DEPENDENT QUERY, o que significa que a subconsulta será executada para cada linha na consulta externa. Você pensaria que o MySQL seria inteligente o suficiente para detectar que a subconsulta não é uma subconsulta correlacionada e a executaria apenas uma vez, infelizmente, ainda não é tão inteligente.

Assim, o MySQL examinará todas as linhas nos alunos, executando a subconsulta para cada linha e não utilizando nenhum índice na consulta externa.

Escrever a consulta como um JOIN permitiria ao MySQL utilizar índices, e a consulta a seguir seria a melhor maneira de escrevê-la:
SELECT COUNT(*) AS count
FROMstudents s
JOIN classes c
  ON c.id = s.classes_id
  AND c.departments_id = 1
WHERE s.status = 1

Isso utilizaria os seguintes índices:
students(`status`)
classes(`id`, `departements_id`) : multi-column index