Создание оптимального индекса для сложного SELECT‑запроса

Сначала уточните created_ar: если такого поля нет, запрос ошибочен. Для переменных фильтров сравните индексы (sex, age, salary) и (sex, age, created_ar).

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

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

Сначала уточните created_ar: если такого поля нет, запрос ошибочен. Для переменных фильтров сравните индексы (sex, age, salary) и (sex, age, created_ar).

Подробный разбор

Ответ с пояснениями

Условие

Сформулируйте индекс, который обеспечит наилучшую производительность для приведённого ниже запроса.

Select * FROM employee WHERE sex = 'm' AND salary > 300000 AND age = 20 ORDER BY created_ar

Опишите, какие столбцы следует включить в индекс и в каком порядке, учитывая условия фильтрации и сортировки.

Ответ

Сначала уточните created_ar: если такого поля нет, запрос ошибочен. Для переменных фильтров сравните индексы (sex, age, salary) и (sex, age, created_ar).

Первый вариант сужает чтение по равенствам и диапазону зарплаты, но обычно требует отдельной сортировки. Второй может отдавать подходящую группу в порядке created_ar, однако проверяет salary как дополнительное условие.

Для неизменного предиката в PostgreSQL возможен частичный индекс по полю сортировки с WHERE sex = 'm' AND age = 20 AND salary > 300000. Это не универсальный индекс для любых параметров. Выбор подтверждают планом и статистикой: единственного «оптимального» порядка без распределения данных и частоты запросов нет.

Источник: www.postgresql.org.

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

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

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

Подробнее