如何使这个MySQL查询更高效?子查询/左联接
我正在寻求帮助以更快地进行查询-如何使这个MySQL查询更高效?子查询/左联接,mysql,Mysql,我正在寻求帮助以更快地进行查询- SELECT DISTINCT waits.ride, T2.daywait, T3.timewait, T4.daytimewait, T5.currentwait FROM waits left join (SELECT Avg(waittime) AS dayWait,
SELECT DISTINCT waits.ride,
T2.daywait,
T3.timewait,
T4.daytimewait,
T5.currentwait
FROM waits
left join (SELECT Avg(waittime) AS dayWait,
ride
FROM waits
WHERE dayofweek = '" . $dow . "'
GROUP BY ride) AS T2
ON T2.ride = waits.ride
left join (SELECT Avg(waittime) AS timeWait,
ride
FROM waits
WHERE currenttime >= '" . $minusTime . "'
AND currenttime <= '" . $plusTime . "'
GROUP BY ride) AS T3
ON T3.ride = waits.ride
left join (SELECT Avg(waittime) AS dayTimeWait,
ride
FROM waits
WHERE currenttime >= '" . $minusTime . "'
AND currenttime <= '" . $plusTime . "'
AND dayofweek = '" . $dow . "'
GROUP BY ride) AS T4
ON T4.ride = waits.ride
left join (SELECT waittime AS currentWait,
ride
FROM waits
GROUP BY ride
ORDER BY wid DESC) AS T5
ON T5.ride = waits.ride
WHERE park = '" . getPark() . "'
为了了解这个查询的应用,我使用它来填充这个链接-。如果你需要更多的信息,请告诉我
我也在寻找子查询T5的具体帮助-我想得到最近添加到每次乘坐DB waitTime的时间-有什么想法可以做到这一点吗?谢谢 只需执行一个子查询而不是四个子查询,并将表读取一次而不是四次,
您将节省3/4 75%的时间:
SELECT ride ,
Avg( CASE WHEN dayofweek = '" . $dow . "' THEN waittime END) AS dayWait,
Avg( CASE WHEN currenttime >= '" . $minusTime . "'
AND currenttime <= '" . $plusTime . "'
THEN waittime END) AS dayWait,
Avg( CASE WHEN currenttime >= '" . $minusTime . "'
AND currenttime <= '" . $plusTime . "'
AND dayofweek = '" . $dow . "'
THEN waittime END) AS dayWait,
waittime AS currentWait
FROM waits
GROUP BY ride