Мне нужно вычислить коэффициент соответствия, а также сохранить общее количество доставок, все это для каждого оператора (транспортера) в SQL. Вот запрос, который я разработал, чтобы удовлетворить эту потребность, и он успешно справляется, но выполнение занимает около 5 минут (зная, что таблица «LIVRAISON» содержит около 350 000 записей):
SELECT idTrans AS id,
nomTrans,
(COUNT(codeSt)
/ (SELECT COUNT(*)
FROM LIVRAISON
NATURAL JOIN TOURNEE
WHERE idTrans=id
AND DateTrn = DATE_SUB(SYSDATE(), INTERVAL 1 DAY)
)
) AS Taux,
(SELECT COUNT(*)
FROM LIVRAISON
NATURAL JOIN TOURNEE
WHERE idTrans=id
AND DateTrn = DATE_SUB(SYSDATE(), INTERVAL 1 DAY)
) AS Total
FROM LIVRAISON
NATURAL JOIN TOURNEE
NATURAL JOIN TRANSPORTEUR
WHERE "{status_type}"
AND DateTrn = DATE_SUB(SYSDATE(), INTERVAL 1 DAY)
GROUP BY idTrans
(status_type
- это условие IN, добавленное в PHP.)
Как я могу ускорить этот тип запроса (и, между прочим, упростить его) до нескольких секунд?