Представьте ситуацию: в PostgreSQL выполняется тяжелый аналитический запрос SELECT COUNT(*) FROM large_table. Поможет ли индекс по первичному ключу ускорить этот запрос? Почему?

Индекс первичного ключа иногда помогает через index-only scan, если он меньше таблицы и видимость строк можно проверить без чтения heap. Но точный COUNT(*) всё равно требует просмотра данных, а не O(1) счётчика.

Короткий ответ

Что ответить на собеседовании

Индекс первичного ключа иногда помогает через 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.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее