Postgres的缓慢更新

时间:2016-12-06 12:42:27

标签: sql postgresql updates query-performance

尝试更新440万行表中的列。我已经能够使用以下版本将查询时间从30多分钟缩短到14分钟:

update t_settlement x
    set dt_ad_decode = y.decode
    from (Select dt_amountdescription_1to1, dt_decode as decode
          from d_amountdescription_1to1
         ) y
    where x."AmountDescription" = y.dt_amountdescription_1to1;

我相信必须有进一步改善这一点的方法,如果有人可以在这方面帮助我,我将不胜感激。

此致

SAURABH

1 个答案:

答案 0 :(得分:1)

首先,为什么使用子查询?写得更简单:

update t_settlement s
    set dt_ad_decode = ad.dt_decode
    from d_amountdescription_1to1 ad
    where s."AmountDescription" = ad.dt_amountdescription_1to1;

这不应影响性能,但它简化了查询。

接下来,您需要d_amountdescription_1to1(dt_amountdescription_1to1)上的索引,或者更好的是d_amountdescription_1to1(dt_amountdescription_1to1, dt_decode)

create index idx_d_amountdescription_1to1_2
    on d_amountdescription_1to1(dt_amountdescription_1to1, dt_decode)