【发布时间】:2020-02-04 12:14:32
【问题描述】:
我有一个有 4 列的表格
- USER_ID:数字
- EVENT_DATE:日期
- 版本:日期
- 分数:十进制
我在 (USER_ID, EVENT_DATE, VERSION) 上有一个聚集索引。这三个值加起来是唯一的。
我需要为Score 大于特定值的一组UserIds(约1000 个不同的ID)获取最大EventDate,并且只考虑那些具有特定Version 的条目。
SELECT M.*
FROM (VALUES
( 5237 ),
………1000 more
( 27054 ) ) C (USER_ID)
CROSS APPLY
(SELECT TOP 1 C.USER_ID, M.EVENT_DATE, M.SCORE
FROM MY_HUGE_TABLE M
WHERE C. USER_ID = M. USER_ID
AND M.VERSION = 'xxxx-xx-xx'
AND M.SCORE > 2 --Comment M.SCORE > 2
ORDER BY M.EVENT_DATE DESC) M
执行查询后,由于 score 列上缺少索引(我想),我的运行时结果很差。
如果我删除“M.SCORE > 2”上的过滤,我的结果会快十倍,但最新的分数可能小于“2”。
谁能告诉我如何设置一个索引来提高我的查询性能。
非常感谢您
【问题讨论】:
-
如果版本不是很挑剔,而且你总是选择一个特定的,那么过滤索引真的会给它带来麻烦
标签: sql sql-server performance indexing