Postgresql慢慢更新大表(1600万行)

时间:2014-07-29 09:44:37

标签: performance postgresql rows updates

我有一张大表,包括大约1600万行: POST表:

+--------------------------------+-----------------------------+-----------+
|             Column             |            Type             | Modifiers |
+--------------------------------+-----------------------------+-----------+
| key                            | character varying(36)       | not null  |
| category_id                    | integer                     |           |
| owner_id                       | integer                     |           |
+--------------------------------+-----------------------------+-----------+

key的值包含36个随机字符。

INDEXES: btree(key), btree(owner_id), btree(category_id)

我的目标是在此表中添加is_deleted属性,从另一个表更新owner_id(以前为None)。 (约有200万行受影响)

我尝试使用以下格式更新多行:

update post_tbl as p 
set owner_id = c.owner_id, 
is_deleted = True
from (values
    (92485, 137736), 
    (948130, 250745), 
    (423832, 1164883), 
    (685966, 521767),
    ...
) as c(owner_id, id)
where p.key in c.id;

WITH number_of_rows是100,200,500,1000,2000。然而,它似乎非常慢〜大约每秒10行。 因此,对于2000000行,可能需要大约50个小时。

我也尝试更改postgresql变量:

synchronous_commit=off;
wal_buffers=32;
shared_buffers=1GB;
random_page_cost=0.005;
seq_page_cost=0.005;

但没有太大变化。 (加上我试图删除owner_id中的btree索引,但没有任何变化)

您能否告诉我如何加快此更新?感谢。

0 个答案:

没有答案