Рассмотрим следующий запрос
SELECT my_id, my_info FROM my_table as r
JOIN (
SELECT my_id, max(my_time) as max_time FROM my_table
WHERE my_time > timestamp '2019-01-10 00:00:00'
GROUP BY my_id) as k
ON k.my_id = r.my_id and k.max_time = r.my_time
И следующую таблицу
my_table
my_id [text, secondary index]
my_info [arbitrary]
my_time [timestamp with timezone, clustered index]
Я думаю, что наиболее эффективный запрос, если плотность элементов my_id
невелика, будет следующей
- Получить набор всех уникальных my_id из таблицы индексов
- Сканирование всей таблицы из первой строки (гарантируется самая высокая временная метка из-за кластеризации) и выборка
my_info
изmy_id
если не был получен ранее.
Я не уверен, что именно это делает postgres, но мне интересно знать, поможет ли использование кластерного индекса в моем исходном запросе
Еслиответ «нет», есть ли способ увеличить скорость выполнения запроса выше, учитывая структуру таблицы?