2

この質問は、セットではなく、単一の行に関するものです。Pg(9.0)の最新かつ最高のバージョンを使用すると、何がより高速になるのか、そしてその理由がわかります。

PKEYのSELECTに基づく条件付きUPDATEまたはINSERT

INSERTを試み、失敗時に例外をキャッチし、UPDATEにフォールバックします

UPDATEの試行、失敗時に例外をキャッチし、INSERTにフォールバックする

これはデータセットに依存するため、次の3つのシナリオを想定します。

  • 行の50%が存在し、50%が存在しません
  • 行の100%が存在します
  • 行の100%が存在しません

プレゼンスは、PKEYが満たされ、行を更新する必要があることを意味します。これに関する研究へのリンクは素晴らしいでしょう。

4

2 に答える 2

5

最初に発行する SELECT は不要な追加作業であり、UPDATE (および場合によっては INSERT) によって暗黙的に行われるため、最初のシナリオは他の 2 つよりも決して高速ではありません。

50% / 50% の分布であっても、何も更新しない UPDATE よりもエラー処理 (例外のキャッチ) にかなりの時間がかかるため、UPDATE/INSERT を使用した方がわずかに高速になると思います。

したがって、実際に多くの行 (たとえば、> 70%) が存在しないことがわかっていない限り、UPDATE/INSERT パターンを使用します。

ただし、それを判断できるのは、使用している環境で適切なパフォーマンス テストを行うことだけです。

于 2011-02-04T18:48:54.037 に答える