Pie*_*che 7 postgresql performance json postgresql-performance
使用普通的更新语句来更新 json(b) 列是否有任何缺点,如下所示:
update "events" set "properties" = '{"type":"graph"}'
Run Code Online (Sandbox Code Playgroud)
而不是使用 PostgreSQL 提供的 jsonb_set 函数,它会变成这样的语句:
update "events" set jsonb_set("properties", {'type'}, 'graph')
Run Code Online (Sandbox Code Playgroud)
当使用例如。一个 ORM,并在刚刚更新了 JSON 字段的模型上调用 .save(),第一个方法将被调用,但是由于 PostgreSQL 文档中没有提到这种做事方式,我担心这个可能有一些缺点。
鉴于我对数据库性能方面的任何事情都不太熟悉,我想我会来这里问一个问题。
提前致谢!
更新:如果 jsonb 的结果值相同,那么唯一的区别是jsonb_set
需要额外的 CPU(和毫秒)来运行。在这两种情况下,您都运行SET column = VALUE
,但如果结果 jsonb 值不同,则您的两个语句都非常不同,这是示例。
样本:
t=# create table so63(j jsonb);
CREATE TABLE
Time: 6.290 ms
t=# insert into so63 select '{"a":0,"b":true}';
INSERT 0 1
Time: 1.137 ms
Run Code Online (Sandbox Code Playgroud)
t=# update so63 set j = jsonb_set(j,'{a}','[2,3,4]');
UPDATE 1
Time: 1.699 ms
t=# select j from so63;
j
-----------------------------
{"a": [2, 3, 4], "b": true}
(1 row)
Run Code Online (Sandbox Code Playgroud)
jsonb 值在指定路径更改!现在update .. set
:
Time: 0.278 ms
t=# update so63 set j = '{"a":[2,3,4]}';
UPDATE 1
Time: 0.918 ms
t=# select j from so63;
j
------------------
{"a": [2, 3, 4]}
(1 row)
Time: 0.241 ms
Run Code Online (Sandbox Code Playgroud)
整个 jsonb 被覆盖。不仅仅是“a”键
归档时间: |
|
查看次数: |
21626 次 |
最近记录: |