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秒。
因此MySQL或SQL Server? –