Я хотел бы выбрать сущность на основе ее имени и в алфавитном порядке, выберите name
следующей строки. Столбец name
является varchar, уникальным и имеет индекс.
Использование оконной функции Lead Вот что я придумал:
SELECT *
FROM (
SELECT
*,
LEAD("name", 1, '') OVER(ORDER BY name) AS next
FROM entity
ORDER BY "name"
) results
WHERE "name" = 'CACTUS';
Однако производительность запроса снижается по мере увеличения размера таблицы сущностей.
План запроса выглядит следующим образом:
Subquery Scan on results (cost=0.42..31205.95 rows=1 width=299)
Filter: ((results.""name"")::text = 'CACTUS'::text)"
-> WindowAgg (cost=0.42..29002.24 rows=176297 width=299)"
-> Index Scan using ""IDX_2fbbd02c0f1ee2a4dda593705d"" on entity (cost=0.42..26357.79 rows=176297 width=235)"
Есть ли более эффективный способ сделать это?
postgresql версия 11 +