Индекс по status помогает отбору, но не обязательно устраняет сортировку. Кандидат — составной индекс (status, created_at DESC), позволяющий читать подходящие строки в нужном порядке.
Какой индекс поможет фильтру статуса и сортировке
Индекс по status помогает отбору, но не обязательно устраняет сортировку. Кандидат — составной индекс (status, created_at DESC), позволяющий читать подходящие строки в нужном порядке.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
PostgreSQL-запрос: SELECT id, created_at FROM orders WHERE status = 'paid' ORDER BY created_at DESC LIMIT 50. Таблица большая. Почему индекс только по status может быть недостаточен?
Ответ
Индекс по status помогает отбору, но не обязательно устраняет сортировку. Кандидат — составной индекс (status, created_at DESC), позволяющий читать подходящие строки в нужном порядке.
Если paid занимает большую долю таблицы, одиночный индекс по статусу может быть малоэффективен. Для часто используемого фиксированного условия возможен частичный индекс по created_at WHERE status='paid'. Выбор подтвердите планом и нагрузкой на запись. При необходимости стабильного порядка добавьте ID в сортировку и соответствующий индекс.