5

プライマリ ID 列 (自動的にインデックスが作成される)、2 つのサブ ID 列 (インデックスも作成される)、およびジオメトリ (ポリゴン) 型の 12 列を含むテーブルがあります。このテーブルで最大 200 万行を更新する場合、次のような最大 200 万の個別の更新ステートメントを実行する方が高速ですか?

update TABLE_NAME set ( COLUMNS ) = ( VALUES ) where ID_COLUMN = NEXT_ID

または、この回答のように、少数の大きな更新ステートメントを実行する方が高速ですか

update TABLE_NAME as update_t set
COLUMNS = new_vals.COLUMNS
from (values
(id, polygon1val, polygon2val, ... polygon12val),   /* row 1 */
(id, polygon1val, polygon2val, ... polygon12val),   /* row 2 */
...                                                 /* ...   */
(id, polygon1val, polygon2val, ... polygon12val)    /* row N */
) as new_vals( COLUMNS )
where new_vals.id = update_t.id

後者の場合、何が良いかについて何か提案はNありますか? = ~2milですかN、それとも小さいサブセットですか (すべて完了するまで繰り返します)。

編集:明らかに、前者の場合、準備済みステートメントを使用します。しかし、後者の場合、準備されたステートメントを使用しようとすることに何か利点があるのでしょうか?

PostgreSQL 9.2 を使用しています。

4

1 に答える 1