[英]How can I make this MySQL query more efficient? Subqueries/Left Joins
我正在尋找有關快速查詢的幫助-
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() . "'
為了讓這個查詢的應用程序,我用它來填充這個鏈接公園的想法- http://www.wdwhelper.com 。 如果您需要其他信息,請告訴我。
我還在尋找有關子查詢T5的特定幫助-我想獲取每次騎行的最新(最后添加到數據庫)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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.