【发布时间】:2015-05-12 16:47:19
【问题描述】:
我在 PostgreSQL 9.2.10 中有一个包含 3200 万行和 31 列的表。我正在通过添加具有更新值的列来更改表格。
例如,如果初始表是:
id initial_color
-- -------------
1 blue
2 red
3 yellow
我正在修改表格,结果是:
id initial_color modified_color
-- ------------- --------------
1 blue blue_green
2 red red_orange
3 yellow yellow_brown
我的代码可以读取 initial_color 列并更新值。
鉴于我的表有 3200 万行,并且我必须对 31 列中的 5 列应用此过程,那么最有效的方法是什么?我目前的选择是:
- 复制列并更新新列中的行
- 创建一个空列并插入新值
我可以一次选择一列,也可以同时选择所有五列。列类型为character varying 或character。
【问题讨论】:
-
复制列:那会是什么 SQL 指令?
-
@DanielVérité UPDATE SET
= ; -
UPDATE 不会创建新列吗?我们需要“复制列”语句来复制 DDL。使用第二个选项,我们需要明确指定所有字段。您需要更多代码来计算。
-
我认为创建一个空列,选择初始列,在内存中改变这些值,然后插入将是最有效的。这是实际命中实际数据库的三个命令。您在内存中完成其余的工作,这要快得多。
标签: sql postgresql database-administration postgresql-performance bulkupdate