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? –