PostgreSQL中用布尔值索引所有JSONB字段的最佳方法



我正在创建一个具有featuresjsonb列的表。将有一组动态特征(每行可以有一组未知的特征(。每个特征都是布尔真/假值。

示例:

  • 第1行:特征:{"快乐":真,"高大":假,"积极":真}
  • 第2行:特征:{"快乐":真,"快":真、"强":假}
  • 第3行:特征:{"聪明":真,"快速":真、"瞌睡":假}

对该列进行索引的最佳方法是什么,这样我就可以进行查询来查找featureX=true的所有行?我查找的所有示例似乎都需要一个字段名来作为索引的基础。

您可以在完整的JSON值上创建索引:

create index on the_table using gin (features);

它可用于例如@>操作员:

select *
from the_table
where features @> '{"happy": true}'

另一种方法是不存储键/值对,而只列出数组中"true"的特性:["happy", "motivated"],然后使用?运算符。通过这种方式,JSON值会小一点,这样可能会更有效率。

select *
from the_table
where features ? 'happy'

或者如果你想测试多种功能:

select *
from the_table
where features ?| array['happy', 'motivated']

这也可以利用GIN指数

最新更新