100万のレコードテーブルがあるとします。各レコードは、IDによって一意に識別できます。テーブルが10個のカーソルに分割され、各カーソルに対して姓のフィールドを大文字に変更するように要求するためにWebクライアントによって10件のリクエストが行われ、10個のコアが利用可能であった場合、作業は10倍速く完了しますか?または、テーブル全体のストレートfor ..ループの定期的な処理と比較して、時間の短縮はありますか?
PostgreSQlは変更を加える並列クエリを実行できないことを知っています。代わりにコードを使用して、それを回避しようとしています。これらのレコードは独立していることに注意してください。すべての変更は厳密にレコードに固有です。
実際、PostgreSQL 9.6は並列(読み取り)クエリを実行できます。並列書き込みはまだサポートされていません。
提案するアプローチは機能しますが、各カーソルはデータベースの異なるスナップショットを持つ異なるセッションになるため、一貫性を保つために注意が必要です。
代わりに、10個の異なるクライアントから10 UPDATEs
を実行することもできます。同じ効果で、より単純で、おそらくより高速です。対象の行範囲が重複しないようにしてください。