Раздувание индекса
Индекс занимает втрое больше места, чем должен, потому что удалённые записи оставили полупустые страницы, которые никогда не уплотняются.
Причина — MVCC: обновление создаёт новую версию строки, а значит и новую запись в индексе, тогда как старая остаётся, пока её не уберёт vacuum. Освободившееся место используется снова, только если новые значения случайно попадают именно на эту страницу, а для возрастающих ключей вроде временных меток этого почти не бывает. В итоге B-дерево из полупустых страниц: больше страниц для чтения, хуже использование кэша, медленнее поиск. Измерить это можно расширением pgstattuple или известными оценочными запросами. Лекарство — REINDEX CONCURRENTLY, доступный с PostgreSQL 12: он перестраивает индекс, не блокируя запись; на более старых версиях — pg_repack.