我有一个表,其中有一个主 id 列(自动索引)、两个子 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
吗?是N
= ~2mil,还是一些较小的子集(我会重复直到它们全部完成)?
编辑:显然,在前一种情况下,我会使用准备好的语句。但我也想知道,在后一种情况下,尝试使用准备好的语句有什么好处吗?
我正在使用 PostgreSQL 9.2。