У меня есть таблица с 4 столбцами
- USER_ID: цифра c
- EVENT_DATE: дата
- ВЕРСИЯ: дата
- SCORE : десятичное число
У меня есть кластерный индекс (USER_ID, EVENT_DATE, VERSION
). Эти три значения вместе являются уникальными.
Мне нужно получить максимум EventDate
для набора UserId
с (~ 1000 различных идентификаторов), где Score
больше указанного значения c и рассматривать только те записи с указанным c 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
. После выполнения запроса я получаю плохие результаты в отношении времени выполнения из-за отсутствия индекса в столбце оценки (полагаю, ).
Если я удаляю фильтрацию в «M.SCORE> 2», я получаю свои результаты в десять раз быстрее, тем не менее, последние результаты могут быть меньше «2».
Может кто-нибудь пожалуйста подскажите, как настроить индекс, который позволит мне повысить производительность запросов.
Заранее большое спасибо