这是创建按小时分组的索引视图的脚本示例。我还有另外 2 个用于日和月。每当向用户授予积分时,表 UserPoints 都会存储一条记录,其中包含名为 CreationDate 的确切日期时间时间戳。
使用 SCHEMABINDING AS 创建视图 [dbo].[HourlyPoints] 选择 [Count] = COUNT_BIG(*) -- SQL Server 要求 ,[用户身份] ,[PointTypeId] ,[点数] = SUM(点数) ,[Hour] = DATEADD(hour, DATEDIFF(HOUR, 0, [CreationDate]), 0) FROM [dbo].[UserPoints] 通过...分组 个人资料 ID ,PointTypeId ,DATEADD(小时, DATEDIFF(HOUR, 0, [CreationDate]), 0) 去 创建唯一的聚集索引 [IX_HourlyPoints_UserId_PointTypeId_Hour] ON [HourlyPoints] ([UserId],[PointTypeId],[Hour]) 去 创建非聚类索引 [IX_HourlyPoints_PointTypeId_Points_Hour] ON [HourlyProfilePoints] ([PointTypeId],[Points],[Hour]) 包括 ([UserId]) 去
我正在尝试确保我有正确的索引来查询此索引视图以获得排行榜,该排行榜将根据 PointType 和总和对用户进行排名。
例如,如果我想要一个基于用户在过去 3 小时内获得的分数的排行榜,我的排行榜查询看起来像这样。(或任何其他时间窗口)。
SELECT * FROM [HourlyPoints]
WHERE [PointTypeId] = 1 --Gold Points
AND [Hour] >= '2013-06-13 01:00:00.000'
AND [Hour] < '2013-06-13 04:00:00.000'
ORDER BY Points
我担心的是,当我运行该查询时,我看不到执行计划窗口显示它正在使用IX_HourlyPoints_PointTypeId_Points_Hour索引。不应该吗?