我有一個統計表(僅附加),其活動記錄是最高的WordsRead
和MinutesRead
每UserId
,BookId
,UserGroupId
和Date
。寫這個查詢更有效的方法嗎?
現在我想查找自給定日期以來總共MinutesRead
和PagesRead
。
該查詢工作 ...但它是在一個大的日期範圍可怕的慢:
SELECT Minutes = SUM(r.MinutesRead), Pages = SUM(r.PagesRead)
FROM (SELECT DISTINCT r.Date, r.UserId, r.BookId, r.UserGroupId
FROM dbo.ReadingStatDaily r
WHERE r.Date >= @p0) r0
CROSS APPLY (SELECT TOP 1 r.MinutesRead, r.PagesRead
FROM dbo.ReadingStatDaily r
WHERE r0.Date = r.Date AND r0.UserId = r.UserId AND r0.UserGroupId = r.UserGroupId AND r0.BookId = r.BookId
AND r.Date >= @p0
ORDER BY r.WordsRead DESC, r.PagesRead DESC) r
執行計劃是這樣的:
沒有掃描鍵查詢或任何其他低垂果實。
任何其他的想法,我可以得到更好的性能出這個查詢?
請編輯您的問題以包含相關表格的DDL,一些示例數據作爲DML和期望的結果。 –