gpt4 book ai didi

sql - 许多单独更新与一次大型更新的速度

转载 作者:行者123 更新时间:2023-11-29 11:41:41 25 4
gpt4 key购买 nike

我有一个表,其中有一个主 ID 列(自动索引)、两个子 ID 列(也有索引)和 12 个几何类型(多边形)列。如果我要更新此表上的约 200 万行,运行约 200 万个单独的更新语句对我来说是否更快

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

或者像 answer 中那样执行一些数量较少的较大更新语句会更快吗?

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 = ~200 万,或一些更小的子集(我会重复直到它们全部完成)?

编辑:显然,在前一种情况下,我会使用准备好的语句。但我也想知道,在后一种情况下,尝试使用准备好的语句有什么好处吗?

我正在使用 PostgreSQL 9.2。

最佳答案

一般来说,将操作批处理到集合中的效果越好,数据库在加快处理速度方面的选择就越多。如果您单独运行更新,唯一的选择是“找到受影响的行,删除它,插入新行”

如果您可以对更新进行批处理,那么规划器就可以决定顺序扫描是否可能比一堆索引扫描更快(而且很可能是这样,因为您可以利用预读缓存)。换句话说,一个更新大量行的命令几乎总是比许多更新单个行的命令执行得更好,即使不考虑计划开销。

关于sql - 许多单独更新与一次大型更新的速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19967392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com