У меня есть таблица, которая содержит столбец 'id' типа BIGSERIAL.У меня также есть индекс для этого одного столбца (порядок сортировки по убыванию, BTREE, уникальный).
Мне часто нужно извлечь последние 10, 20, 30 записей из таблицы миллионов записей, например:
SELECT * FROM table ORDER BY id DESC LIMIT 10
Я бы подумал, что это довольно ясный случай: для этого конкретного поля есть индекс, порядок сортировки соответствует, и мне нужно всего 10 записей по сравнению с миллионами во всей таблице, этот запрос определенно использует индекссканирования.
Но он не выполняет последовательное сканирование всей таблицы.
Я стараюсь копать глубже, не нашел ничего необычного.Документ Postgres по адресу https://www.postgresql.org/docs/9.6/static/indexes-ordering.html говорит:
Важным частным случаем является ORDER BY в сочетании с LIMIT n: явная сортировка должна обрабатывать все данные, чтобы идентифицировать первые n строк, но если есть индекс, соответствующий ORDER BY, первые n строк могут быть получены напрямую, без сканирования оставшейся части.
Но это все равно не работает.У кого-нибудь есть какие-нибудь указатели для меня?Может быть, я просто больше не вижу леса для деревьев ...: - (