Postgresql Postgres:附加到大型jsonb数组是否昂贵?
假设我有一个表Postgresql Postgres:附加到大型jsonb数组是否昂贵?,postgresql,jsonb,Postgresql,Jsonb,假设我有一个表t,其中有列t\u id(uuid),xs(jsonb,一个json数组) 我的问题是,SQLupdate t set xs=xs | |'[“x1”,“x2”]::jsonb其中t|id=“some uuid”昂贵吗 它可能很昂贵,原因有两个: a) |运算符解析左操作数,因此如果左操作数较大,解析成本会很高 b) 我听说如果您更新任何列,PG将更新整行,因为xs列很大,这涉及读取原始值(左操作数),将其与新值连接,并将结果写入磁盘到新位置(磁盘上) 我说的对吗?您的第二点非常正
t
,其中有列t\u id(uuid)
,xs(jsonb,一个json数组)
我的问题是,SQLupdate t set xs=xs | |'[“x1”,“x2”]::jsonb其中t|id=“some uuid”
昂贵吗
它可能很昂贵,原因有两个:
a) |
运算符解析左操作数,因此如果左操作数较大,解析成本会很高
b) 我听说如果您更新任何列,PG将更新整行,因为xs
列很大,这涉及读取原始值(左操作数),将其与新值连接,并将结果写入磁盘到新位置(磁盘上)
我说的对吗?您的第二点非常正确:PostgreSQL读取整行,修改值,并将一个全新的行版本写入表中。保留旧的行版本以提供并发读取 修改大型的
jsonb
不会非常昂贵,但整个过程都必须被塞进RAM中
您最好规范化表结构,并将接受定期修改的JSON属性存储在单独的表中。这将使手术更便宜