我有一个统计表(仅附加),其活动记录是最高的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和期望的结果。 –