Чтобы принять правильное решение, вы должны принять во внимание следующее:
Если user_id является частью первичного ключа (вы сказали, что это, вероятно, так), то является ли первичный ключ кластеризованным индексом для таблицы? Если это так, находится ли user_id в первой позиции в кластерном индексе? Если да, то сколько действий вы ожидаете иметь на пользователя? Если на пользователя приходится 1-40 действий, то добавление еще одного индекса не будет полезным и снизит производительность вставки. Причина в том, что все строки действий для пользователя будут сгруппированы вместе и, вероятно, будут на одной странице базы данных, поэтому добавление activity_type_id к индексу не поможет.
Если первичный ключ не кластеризован и user_id не находится на первой позиции в первичном ключе, или user_id не находится в первичном ключе, тогда вам лучше всего ставить некластеризованный индекс с user_id, activity_type_id , Оптимизатор запросов должен быть достаточно умным, чтобы использовать индекс, поскольку и user_id, и activity_type_id находятся в операторе where даже при наличии предложения IN. Вы также можете добавить create_at в конец индекса, так как вы упорядочиваете результаты запроса таким образом.
Будьте осторожны при создании индексов специально для одного запроса, но если запрос интенсивно используется, это часто необходимо.