プライマリ 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 を使用しています。