Если PostgreSQL не использует
Index Only Scan, проблема часто не в запросе и не в самом индексе.Index Only Scan работает только если страницы помечены как видимые в visibility map. Если этого нет PostgreSQL всё равно идёт в таблицу.Проверьте план выполнения:
EXPLAIN ANALYZE
SELECT id FROM orders WHERE status = 'pending';
Если видите
Index Scan, а не Index Only Scan, одна из частых причин в том, что visibility map не заполнена (при наличии подходящего covering index).Исправляется простой командой:
VACUUM (ANALYZE) orders;
🔥
VACUUM помечает страницы как all-visible, и PostgreSQL может перестать читать таблицу.➡️ SQL Ready | #совет
