繁体   English   中英

如何使此MySQL查询更有效? 子查询/左联接

[英]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://pastebin.com/DDSpGFWQ

为了让这个查询的应用程序,我用它来填充这个链接公园的想法- 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM