Сначала уточните created_ar: если такого поля нет, запрос ошибочен. Для переменных фильтров сравните индексы (sex, age, salary) и (sex, age, created_ar).
Создание оптимального индекса для сложного SELECT‑запроса
Сначала уточните 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.