У нас есть база данных системы регистрации, и в основном этот запрос выполняется, проверяя учащихся, которые находятся в классе, чтобы они могли быть отмечены как отсутствующие, если они отсутствуют. По какой-то причине это занимает 30 секунд. Кто-нибудь знает, почему?Запрос занимает 30 секунд
FROM Stdts
LEFT JOIN StdtReg ON StdtReg.StdtID = Stdts.ID
LEFT JOIN usrs ON StdtReg.userID = usrs.ID
WHERE (SELECT ID FROM ClssInstncEnrol cie WHERE cie.status = 0 AND classInstanceID={$_GET['ci']} AND StdtID = Stdts.ID LIMIT 1) IS NOT NULL
OR (SELECT ID FROM DropIns di WHERE di.type <> -1 AND classInstanceID= {$_GET['ci']} AND StdtID = Stdts.ID LIMIT 1) IS NOT NULL
AND (CONCAT(Stdts.firstName, ' ', Stdts.lastName) OR CONCAT(usrs.firstName,' ', usrs.lastName))
ORDER BY firstName, lastName
Подзапросы, вычисления (CONCAT) на каждой строке, и я бы поставил и недостаточные индексы. – ceejayoz
Попробуйте выполнить «объяснение» в запросе и посмотрите, какие индексы (если они есть) используются. –
Этот код должен занять нулевые секунды и сразу же вызвать ошибку, поскольку это недействительный запрос :) –