2

したがって、外部テーブルに挿入したいレコードが多数ある場合は、次のようにすることができます (疑似コード):

DO
    INSERT INTO my_fdw_table VALUES next_row;
LOOP

またはこれ:

INSERT INTO my_fdw_table SELECT all_the_rows;

私の直感では、SQL キーワードの繰り返しが少なく、すべてのデータが一度に送信されるため、2 番目の方が効率的です。

ただし、2 番目の結果が実際に往復回数と同じになるかどうかはわかりません。また、行数が多い場合、2番目が何らかのステートメントの長さの制限に達するリスクがあるかどうかもわかりませんか?

私はpostgres 9.3を使用しています

4

1 に答える 1

0

大量であっても、外部サーバーINSERTで多くの単一INSERTの が発生するため、両方の場合で同じ回数のラウンドトリップが発生するため、違いはそれほど大きくありません。

INSERT測定可能な違いがまったくある場合は、ループを処理するクライアントまたは PL/pgSQL コードに時間がかかるためだと思います。もちろん、それぞれINSERTを独自のトランザクションで実行したり、INSERTステートメントに動的 SQL を使用したりすると、そのために遅くなります。

于 2016-10-10T08:44:36.797 に答える