Выключенный VACUUM и постоянные обновления мешают index-only scan в PostgreSQL
Дело в том, что index-only scan возможен только, если в Visibility Map установлен visibility
флаг для искомых страниц.
Флаг visibility
устанавливается вакумом и означает, что в странице нет старых версий строк и нет никаких незакоммиченных новых. – т. е. страница целиком и полностью состоит из видимых версий строк.
Соответственно visibility
флаг снимается как только какая-либо транзакция начинает добавлять новые версии строк в страницу.
Поэтому для index-only scan недостаточно наличия одних только данных в индексе. Важно, чтобы страницы с данными были почищены от старых версий строк и никакие новые транзакции не работали с новыми версиями строк.