Подсчет - очень тяжелая операция в Postgres. По возможности этого следует избегать. Очень сложно сделать это лучше, поэтому для каждой строки Postgress нужно go, а для каждой строки c. Вы действительно можете создать лучший индекс, чтобы выбирать, какие строки выбирать из диска c быстрее, но даже с этим временем счета всегда будет go за линейное время по сравнению с размером данных.
Ваш индекс должен быть:
CREATE INDEX session_timestamp_user_id_index ON slot_result_primary (session_timestamp, user_id)
для достижения наилучших результатов.
Тем не менее, индекс не решит ваши проблемы с подсчетом полностью. В аналогичной ситуации я столкнулся два дня с go (с запросом SELECT, выполняющим 3 с, а счетчик - с 1 с), выделенные индексы позволяли pu sh сократить время выбора до 0,3 мс, но лучшее, что я мог сделать со счетчиком, было 700 мс .
Здесь вы можете найти хорошую статью с кратким изложением того, почему счетчик сложен, и различные способы его улучшения: https://www.citusdata.com/blog/2016/10/12/count-performance/