Сначала форма обращения
Лента обычно фильтрует статьи по автору и сортирует по времени. Индекс только по времени помогает общей ленте, но не обязательно помогает странице конкретного автора.
CREATE INDEX articles_author_created
ON articles (author_id, created_at DESC);В таком индексе близко находятся записи одного автора, уже расположенные по времени. Он полезен для запроса с условием author_id и сортировкой created_at.
Смотреть на план
Наличие индекса само по себе не подтверждает ускорение. EXPLAIN показывает выбранный путь, а EXPLAIN ANALYZE выполняет запрос и даёт фактическое время. Для записывающих запросов второй вариант требует осторожности: изменение действительно произойдёт.
Маленькую таблицу PostgreSQL может выгоднее прочитать целиком. Это нормальное решение планировщика, а не признак сломанного индекса.
Не читать лишнее
Список статей требует названия, описания, автора и даты. Полный текст нужен при открытии статьи. Исключение тела из выборки уменьшает передачу данных и работу сериализации.
Постраничное чтение сохраняет доступ ко всем результатам, не загружая всё сообщество в память. При большом количестве глубоких страниц стоит изучить переход по последней паре времени и идентификатора. Пока такого сценария нет, обычная пагинация остаётся понятным решением.