パフォーマンスの問題を更新する-ベストプラクティス

BogdanM

PostgreSQLを使い始めたばかりで、SQL Serverを使っていましたが、現在、既存のプロセスの一部を移行しています。
私が直面している現在の問題は、Updateステートメントのパフォーマンスです。
1つのテーブル(MyTable_Historyなど)からすべてのレコードを更新し、いくつかの列に新しい値を設定しようとしています。

SQL Serverでは、次の構文を使用しました。

declare @NewEndDate datetime = (select dateadd(minute, -1, getdate()))
update MyTable_History
set isLastestVersion=0, ValidTo=@NewEndDate , ModifiedBy='TestSCriptSql',ModifiedTime=GETDATE()

PostgreSQL用に思いつくことができるコード(単純に変数を使用する方法がわからないため、一時的なtblを使用したため)は次のとおりです。

CREATE TEMP TABLE dates AS VALUES (current_timestamp + (-1 ||' minutes')::interval);   

with d as (
    select th.validto as validto,  th.islatestversion as islatestversion,
    th.modifiedby as modifiedby, th.modifiedtime as modifiedtime, d.column1 as newvalidto
    from MyTable_History th,  dates d
)
update MyTable_History
set validto = d.newvalidto, islatestversion=false, modifiedby='test_update_script', modifiedtime=current_timestamp
from d

SQL Serverは私のラップトップ(スーパー構成ではない)でローカルに実行され、PosgreSQLサーバーはAWSでRDSとして実行されます(正確な仕様はわかりません)。
私の質問は、PostgreSql更新ステートメントで何か間違ったことをしているのですか?Sql Serverの5000以上のデータセットサンプルでは、​​ステートメントが即座に実行されますが、PostgreSqlでは正常に終了するのに約50秒かかります。

また、私の観点からは、SQL Serverでは3行のコードがあり、postgreSqlではCTEを使用しているため、過剰に設計されているようです。

よろしく、

名のない馬

そもそもなぜ変数が必要なのかわかりません。current_timestampトランザクション全体でマニュアルに記載されているのと同じ値を返すため、更新されたすべての行で同じ値になります。

update mytable_history
  set islastestversion = 0, 
      validto = current_timestamp - interval '1 minute',  
      modifiedby = 'test_update_script',
      modifiedtime = current_timestamp;

しかしFROM、UPDATEステートメントでのの使用法は間違っています。UPDATEステートメントでFROMを使用するセマンティクスは、PostgresとSQLServerで大きく異なります。

これを使用する方法により、CTEとmytable_historyの間に相互結合作成されます(つまり、基本的にテーブルとそれ自体の相互結合)。

主キーのWHERE句に結合条件が必要です。

with d as (...) 
update MyTable_History
  set validto = d.newvalidto, islatestversion=false,    
      modifiedby='test_update_script', modifiedtime=current_timestamp
from d
where d.pk_column = MyTable_History.pk_column;

しかし、本当に変数のようなものをシミュレートしたい場合は、CTEは必要ありません。

update mytable_history
  set islastestversion = 0, 
      validto = t.newvalidto
      modifiedby = 'test_update_script',
      modifiedtime = current_timestamp
from ( 
   values (current_timestamp - interval '1 minute') 
) t (newvalidto);

上記は依然として「クロス結合」を作成しますが、結合されたテーブル(from (values ...))単一の行のみが含まれているため、実際にはクロス結合ではありません)。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Oracleテーブルのレコードを更新する際のEntityFrameworkのパフォーマンスの問題

分類Dev

Hibernateパフォーマンスのベストプラクティス?

分類Dev

Eigenのパフォーマンスを向上させる-ベストプラクティス

分類Dev

パフォーマンスの問題を強調するマークダウンテキスト-Tkinter

分類Dev

Mongodbに埋め込まれたドキュメントを更新する:パフォーマンスの問題?

分類Dev

IOS-多数の画像を処理するためのベストプラクティス(パフォーマンス+ディスク上のサイズ)

分類Dev

onBackPressed()ベストプラクティス/パフォーマンス

分類Dev

パフォーマンスの問題のクエリを特定する方法 - MYSQL

分類Dev

NamedQuery:ベストプラクティス

分類Dev

ベストプラクティスLaravelgitignore

分類Dev

.CSVファイルをSQLServerにインポートするための(パフォーマンス面での)ベストプラクティス

分類Dev

以下のスクリプトを変更する方法のSQLパフォーマンスの問題?

分類Dev

XAMLを作成する際のVisualStudioのパフォーマンスの問題

分類Dev

XAMLを作成する際のVisualStudioのパフォーマンスの問題

分類Dev

Windowsパーティションをマウントするためのベストプラクティス

分類Dev

C#属性を使用する場合のパフォーマンスの問題?

分類Dev

PHPのパフォーマンスの問題を追跡する

分類Dev

パフォーマンスの問題の原因を確認する方法

分類Dev

IQueryable.First()を実行する際のパフォーマンスの問題

分類Dev

WHEREEXISTS条件を使用する場合のパフォーマンスの問題

分類Dev

SonataAdminエンティティのリストに関するパフォーマンスの問題

分類Dev

クラスパスからメールベロシティトランスフォーマーテンプレートに画像を追加する方法

分類Dev

MongoDBバッチ更新のパフォーマンスの問題

分類Dev

CSVから重複を削除する-パフォーマンスの問題

分類Dev

ベクトルのパフォーマンスの問題

分類Dev

ネイティブパフォーマンスの問題に対応する

分類Dev

Javaソケットプログラムのパフォーマンスの問題を調査する方法

分類Dev

パフォーマンスのためのdbunitのベストプラクティス

分類Dev

パフォーマンスの問題

Related 関連記事

  1. 1

    Oracleテーブルのレコードを更新する際のEntityFrameworkのパフォーマンスの問題

  2. 2

    Hibernateパフォーマンスのベストプラクティス?

  3. 3

    Eigenのパフォーマンスを向上させる-ベストプラクティス

  4. 4

    パフォーマンスの問題を強調するマークダウンテキスト-Tkinter

  5. 5

    Mongodbに埋め込まれたドキュメントを更新する:パフォーマンスの問題?

  6. 6

    IOS-多数の画像を処理するためのベストプラクティス(パフォーマンス+ディスク上のサイズ)

  7. 7

    onBackPressed()ベストプラクティス/パフォーマンス

  8. 8

    パフォーマンスの問題のクエリを特定する方法 - MYSQL

  9. 9

    NamedQuery:ベストプラクティス

  10. 10

    ベストプラクティスLaravelgitignore

  11. 11

    .CSVファイルをSQLServerにインポートするための(パフォーマンス面での)ベストプラクティス

  12. 12

    以下のスクリプトを変更する方法のSQLパフォーマンスの問題?

  13. 13

    XAMLを作成する際のVisualStudioのパフォーマンスの問題

  14. 14

    XAMLを作成する際のVisualStudioのパフォーマンスの問題

  15. 15

    Windowsパーティションをマウントするためのベストプラクティス

  16. 16

    C#属性を使用する場合のパフォーマンスの問題?

  17. 17

    PHPのパフォーマンスの問題を追跡する

  18. 18

    パフォーマンスの問題の原因を確認する方法

  19. 19

    IQueryable.First()を実行する際のパフォーマンスの問題

  20. 20

    WHEREEXISTS条件を使用する場合のパフォーマンスの問題

  21. 21

    SonataAdminエンティティのリストに関するパフォーマンスの問題

  22. 22

    クラスパスからメールベロシティトランスフォーマーテンプレートに画像を追加する方法

  23. 23

    MongoDBバッチ更新のパフォーマンスの問題

  24. 24

    CSVから重複を削除する-パフォーマンスの問題

  25. 25

    ベクトルのパフォーマンスの問題

  26. 26

    ネイティブパフォーマンスの問題に対応する

  27. 27

    Javaソケットプログラムのパフォーマンスの問題を調査する方法

  28. 28

    パフォーマンスのためのdbunitのベストプラクティス

  29. 29

    パフォーマンスの問題

ホットタグ

アーカイブ