Postgres 数组列与 JSONB 列
Posted
技术标签:
【中文标题】Postgres 数组列与 JSONB 列【英文标题】:Postgres Array column vs JSONB column 【发布时间】:2020-02-25 20:40:32 【问题描述】:Postgres 数组列是否比包含 JSON 数组的 JSONB 列更容易被索引?
https://www.postgresql.org/docs/current/arrays.html
https://www.compose.com/articles/faster-operations-with-the-jsonb-data-type-in-postgresql/
【问题讨论】:
简单是什么意思? 我想无论是从数据库的努力还是对开发人员的努力 与您的问题无关,但是:Postgres 9.4 是no longer supported,您应该尽快计划升级。 【参考方案1】:从语法上讲,JSONB 数组可能更易于使用,因为您不必将查询值包装在虚拟数组构造函数中:
where jsonbcolumn ? 'abc';
对
where textarraycolumn @> ARRAY['abc']
另一方面,规划器可能会使用 PostgreSQL 数组做出更好的决策,因为它会收集有关其内容的统计信息,但不会收集 JSONB。
此外,您应该阅读您正在使用的 PostgreSQL 版本的文档,该版本希望大于 9.4,实际上应该大于 9.1。
【讨论】:
第二个条件也可以写成where 'abc' = any(textarraycolumn)
@a_horse_with_no_name 是的,但该公式不会使用索引。以上是关于Postgres 数组列与 JSONB 列的主要内容,如果未能解决你的问题,请参考以下文章
Postgres检查jsonb数组是不是不包含值返回空结果集
如何在 Postgres 9.4 中对 JSONB 类型的列执行更新操作