Выбор ответа Middle Индексы спрашивают часто обновлено

Правило левого префикса

Вопрос

Есть индекс (customer_id, created_at). Какой запрос в PostgreSQL 16 не сможет эффективно искать по этому индексу?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: WHERE createdat '2026-01-01'. Составной индекс отсортирован сначала по customerid, и записи с нужными датами разбросаны по всему дереву, поэтому спуститься к ним по дереву нельзя.

Варианты ответа

  1. WHERE customer_id = 5
  2. WHERE created_at > '2026-01-01'правильный ответ
  3. WHERE customer_id = 5 AND created_at > '2026-01-01'
  4. WHERE customer_id = 5 ORDER BY created_at

Разбор

Составной индекс отсортирован сначала по customer_id, и записи с нужными датами разбросаны по всему дереву, поэтому спуститься к ним по дереву нельзя. Остальные запросы начинаются с ведущей колонки: равенство по customer_id и затем диапазон или сортировка по created_at идеально ложатся на индекс. В PostgreSQL 18 появился skip scan, который в некоторых случаях обходит это ограничение при малом числе разных значений ведущей колонки, но правило порядка колонок всё равно главное.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.