Как и для любого условия WHERE
в SQL: если индекса нет, база данных должна пройти по всем строкам таблицы, чтобы найти те, которые удовлетворяют вашему условию.
Вы можете индексировать определенное выражение или индексировать все значение json с помощью GIN index , который затем позволяет Postgres использовать индекс, если используется какой-либо из поддерживаемых операторов.
Если вы всегда проверяете город, вы можете создать обычный индекс B-Tree:
create index on a ( (info->>'city') );
Если вы не знаете, что будете искать, индекс GIN может быть лучшим выбором:
create index on a using gin (info);
Но вам нужно будет изменить свой запрос, чтобы использовать один из операторов, поддерживаемых индексом GIN, например, использование содержит оператор @>
select *
from a
where info @> '{"city": "portland"}::jsonb;
Обратите внимание, что поиск по индексу не всегда является наиболее эффективным решением. Иногда быстрее просто пройти по всем строкам, иногда поиск по индексу выполняется быстрее.
Если вы хотите узнать больше об индексах в реляционной базе данных, просмотрите материал здесь: http://use -the-index-luke.com /