Винаги трябва да използвате EXPLAIN
за да определите как ще се изпълнява вашата заявка.
За съжаление MySQL ще изпълни вашата подзаявка като ЗАВИСИМА ЗАПИСКА, което означава, че подзаявката ще се изпълнява за всеки ред във външната заявка. Бихте си помислили, че MySQL ще бъде достатъчно умен, за да открие, че подзаявката не е корелирана подзаявка и ще я изпълни само веднъж, уви, все още не е толкова интелигентна.
Така MySQL ще сканира всички редове в учениците, изпълнявайки подзаявката за всеки ред и няма да използва никакви индекси на външната заявка.
Написването на заявката като JOIN би позволило на MySQL да използва индекси, а следната заявка би била оптималният начин да се напише:
SELECT COUNT(*) AS count
FROMstudents s
JOIN classes c
ON c.id = s.classes_id
AND c.departments_id = 1
WHERE s.status = 1
Това ще използва следните индекси:
students(`status`)
classes(`id`, `departements_id`) : multi-column index