Вы можете создать индекс по полному значению JSON:
create index on the_table using gin (features);
Его можно использовать, например, для оператора @>
:
select *
from the_table
where features @> '{"happy": true}'
Другим способом было бы несохранить пары ключ / значение, но перечислить только те функции, которые являются «истинными» в массиве: ["happy", "motivated"]
, а затем использовать оператор ?
. Таким образом, значение JSON будет немного меньше, и это может быть более эффективным.
select *
from the_table
where features ? 'happy'
или если вы хотите проверить несколько функций:
select *
from the_table
where features ?| array['happy', 'motivated']
Это тоже может использоватьиндекс Джин