[英]How can I make this MySQL query more efficient? Subqueries/Left Joins
I'm looking for help with making a query quicker - 我正在寻找有关快速查询的帮助-
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://pastebin.com/DDSpGFWQ http://pastebin.com/DDSpGFWQ
To give an idea of the application of this query I am using it to populate the parks at this link - http://www.wdwhelper.com . 为了让这个查询的应用程序,我用它来填充这个链接公园的想法- http://www.wdwhelper.com 。 If you need additional info, just let me know. 如果您需要其他信息,请告诉我。
I am also looking for specific help on subquery T5 - I want to get the most recent (last added to DB) waitTime for each ride - any ideas how this would be possible? 我还在寻找有关子查询T5的特定帮助-我想获取每次骑行的最新(最后添加到数据库)waitTime-任何想法这怎么可能? Thanks! 谢谢!
Just do one subquery in place of four, and read the table once instead of four times, 只需执行一个子查询代替四个子查询,然后读取一次表即可,而不是四次,
and you will save 3/4 (75%) of the time: 您将节省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.