我要计算一个符合率,还要保留交货的总数,所有这些都是用sql表示的每个承运商(transporteur)。下面是我为满足这一需求而定制的查询,它成功地完成了这一任务,但执行它大约需要5分钟(知道“livraison”表有大约350000个条目):
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
在php中添加了in条件。)如何将这种查询的速度(顺便说一下,简化它)提高到几秒钟?
2条答案
按热度按时间bprjcwpo1#
查看您的代码,您可以使用join中的subselect避免select for列值,例如:
也可以使用另一个内部连接来避免in子句
inkz8wg92#
我修改了scaisedge answer(及时执行,但给出的费率都等于1)使其可用:
谢谢,我会记得用的
INNER JOIN
为了这个。