Вопрос проверяет понимание важности сбора и поддержания актуальной статистики в PostgreSQL для оптимизации производительности запросов.
PostgreSQL использует статистику для оценки количества строк, возвращаемых запросами, и выбора оптимального плана выполнения. Без актуальной статистики планировщик может выбрать неправильный индекс или метод соединения, что приведет к медленным запросам.
Команда ANALYZE собирает статистику о распределении данных в таблицах. Она сканирует случайную выборку строк и вычисляет гистограммы, частоту наиболее распространенных значений и корреляции между столбцами. Эту информацию планировщик использует для оценки селективности условий WHERE и JOIN.
-- Создаем таблицу с 1 млн строк
CREATE TABLE orders (id SERIAL, status TEXT, amount NUMERIC);
INSERT INTO orders (status, amount)
SELECT 'completed', random()*1000 FROM generate_series(1, 1000000);
INSERT INTO orders (status, amount)
SELECT 'pending', random()*1000 FROM generate_series(1, 100);
-- Без статистики планировщик может ошибиться
EXPLAIN ANALYZE SELECT * FROM orders WHERE status = 'pending';
-- После ANALYZE
ANALYZE orders;
EXPLAIN ANALYZE SELECT * FROM orders WHERE status = 'pending';После выполнения ANALYZE планировщик понимает, что статус 'pending' встречается редко, и может использовать индекс для быстрого поиска.
Вывод: Поддержание актуальной статистики — это базовая практика администрирования PostgreSQL, которая напрямую влияет на производительность запросов. Регулярный запуск ANALYZE (автоматически или вручную) помогает избежать деградации производительности из-за неверных планов выполнения.