2015-07-02 73 views
1

我有2个查询时的效果:什么是SQL查询的性能有合计函数和WHERE子句

SELECT u.unitId unitId, 
     u.unitScode 'unitScode', 
     (Cast(Count(vd.Date) AS FLOAT)/u.timeDiff) * 100 'BookingCount', 
     u.tradeStartTime, 
     u.tradeStopTime, 
     u.minimumSlot, 
     u.maximumTerm 
    FROM @allDates vd 
     INNER JOIN CommcmlBookingDetail cd 
       ON vd.Date BETWEEN cd.dtFromTime AND cd.dtToTime 
        AND Datepart(minute, vd.date) = Datepart(minute, cd.dtFromTime) 
     INNER JOIN CommCmlBooking cb 
       ON cb.hMy = cd.hBooking 
        AND cb.iStatus = 1 
        AND cb.iType = 525 
     INNER JOIN @unitsInfo u 
       ON u.unitId = cb.hUnit 
        AND Cast(vd.Date AS DATE) BETWEEN Cast(@BookingFromDate AS DATE) AND Cast(@BookingToDate AS DATE) 
        AND Cast(vd.Date AS TIME) BETWEEN Cast(u.tradeStartTime AS TIME) AND Cast(u.tradeStopTime AS TIME) 
    WHERE cb.hRecord = case when @amendmentId = 0 then cb.hRecord else @amendmentId end 
    GROUP BY u.unitId, 
      u.unitScode, 
      u.minimumSlot, 
      u.tradeStartTime, 
      u.timeDiff, 
      u.tradeStopTime, 
      u.maximumTerm; 

2.

INSERT INTO @tempBookingCount 
     SELECT u.unitId, 
      u.timeDiff 
     FROM @allDates vd 
      INNER JOIN CommcmlBookingDetail cd 
        ON vd.Date BETWEEN cd.dtFromTime AND cd.dtToTime 
         AND Datepart(minute, vd.date) = Datepart(minute, cd.dtFromTime) 
      INNER JOIN CommCmlBooking cb 
        ON cb.hMy = cd.hBooking 
         AND cb.iStatus = 1 
         AND cb.iType = 525 
      INNER JOIN @unitsInfo u 
        ON u.unitId = cb.hUnit 
         AND Cast(vd.Date AS DATE) BETWEEN Cast(@BookingFromDate AS DATE) AND Cast(@BookingToDate AS DATE) 
         AND Cast(vd.Date AS TIME) BETWEEN Cast(u.tradeStartTime AS TIME) AND Cast(u.tradeStopTime AS TIME) 
     WHERE cb.hRecord = case when @amendmentId = 0 then cb.hRecord else @amendmentId end 


INSERT INTO @unitBookingCount 
    SELECT tt.unitID, 
     u.unitScode, 
     (Cast(Count(tt.unitID) AS FLOAT)/tt.timeDiff) * 100, 
     u.tradeStartTime, 
     u.tradeStopTime, 
     u.minimumSlot, 
     u.maximumTerm 
    FROM @tempBookingCount tt 
     INNER JOIN @unitsInfo u 
       ON u.unitId = tt.unitID 
    GROUP BY tt.unitID, 
      tt.timeDiff, 
      u.tradeStartTime, 
      u.tradeStopTime, 
      u.minimumSlot, 
      u.maximumTerm, 
      u.unitScode 

我已经把第一个查询分成了两部分,我可以在性能上有很大的区别!
当执行5个月时,第一个查询取14秒,其中下一个查询取4秒

+0

因此MySQL或SQL Server? –

回答