Индекс первичного ключа иногда помогает через index-only scan, если он меньше таблицы и видимость строк можно проверить без чтения heap. Но точный COUNT(*) всё равно требует просмотра данных, а не O(1) счётчика.
Представьте ситуацию: в PostgreSQL выполняется тяжелый аналитический запрос SELECT COUNT(*) FROM large_table. Поможет ли индекс по первичному ключу ускорить этот запрос? Почему?
Индекс первичного ключа иногда помогает через index-only scan, если он меньше таблицы и видимость строк можно проверить без чтения heap. Но точный COUNT(*) всё равно требует просмотра данных, а не O(1) счётчика.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Индекс первичного ключа иногда помогает через index-only scan, если он меньше таблицы и видимость строк можно проверить без чтения heap. Но точный COUNT(*) всё равно требует просмотра данных, а не O(1) счётчика.
Из-за MVCC число видимых строк зависит от снимка транзакции. Visibility map позволяет избежать обращений к heap для страниц, где все строки видимы; при частых изменениях это преимущество уменьшается. Планировщик может выбрать parallel sequential scan, если он дешевле. Наличие PK не гарантирует ускорение. Если нужна приблизительная оценка, можно использовать статистику, но её нельзя выдавать за точное число строк.
Источник: www.postgresql.org.