2016-12-06 20 views
0

440万行のテーブルの列を更新しようとしています。私はそこにさらに、これを改善する方法でなければならず、誰かが、この中で私を助けることができれば感謝されると確信していますPostgresで遅い更新

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; 

:私は、次のバージョンで14分に30+分から私のクエリ時間を短縮することができました敬具。

よろしく

Saurabh

答えて

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) 
+0

私はサブクエリでそれをやった理由は、クエリが上記更新クエリよりも低い〜3分かかったということでした。別の質問、このインデックスはパフォーマンスを向上させます。 @SaurabhOmar。 –

+0

。 。奇妙に思える。あなたは実行計画をチェックしますが、私はサブクエリが最適化されることを期待しています。インデックスはそれを超えるパフォーマンスを向上させるはずです。 –