1.
Нет , индекс не может быть использован, как предполагает руководство.Вы можете проверить, создав такой индекс для любой таблицы, а затем, только для сеанса тестирования:
SET enable_seqscan = OFF;
Тогда:
EXPLAIN
SELECT * FROM tbl ORDER BY ORDER BY x, y DESC;
Теперь, если индекс можно использовать в любой способ, это было бы.Но вы все равно увидите последовательное сканирование.
Существует ожидающий патч для реализации «инкрементной сортировки», но его пока нет.См .:
Исключение углового случая: если возможно сканирование только для индекса индекс может все еще использоваться, если он существенно меньше таблицы.Но строки должны быть отсортированы с нуля.
Связанный:
2.
Да , индекс идеально подходит.
(Даже работает, если индекс имеет y ASC
. Его можно сканировать в обратном направлении. Только NULL
в этом случае размещение является недостатком.)
Конечно, если x = 999
является стабильным предикатом (это всегда 999
, в котором мы заинтересованы) и более чем в нескольких строках есть разные x
,тогда частичный индекс будет еще более эффективным:
CREATE INDEX ON tbl (y DESC) WHERE x = 999;
db <> fiddle здесь