情境是有100万只VT豚跟50个水管频道
V豚每天会看好几次直播,每次可能看同个频道,也可能看不同频道
每当VT豚点开水管频道看台,在数据库纪录VT豚、频道名、时间、跟一些其他东西
(索引建在VT豚)
原本的需求是指定任一只V豚,回传他最近一次看的频道
做法很单纯
SELECT TOP(1) 频道 FROM [看台纪录] WHERE VT豚 = 'laptic' ORDER BY 时间 DESC
现在查询需求改成要回传他最近看过的3个相异频道
姆咪的想法是用窗函数先排出每个频道的最后一次观看时间,再去排序取最新3个
WITH T AS (
SELECT 频道,时间,
ROW_NUMBER() OVER (PARTITION BY VT豚, 频道 ORDER BY 时间 DESC) AS R
FROM [看台纪录] WHERE VT豚 = 'laptic'
) SELECT TOP(3) 频道 FROM T WHERE R = 1 ORDER BY 时间 DESC
看起来结果是对的,但怕调整后影响到效能
有什么效率更好的方法吗?