我对具有1000万条记录的单列执行了更新查询。在postgresql中这会花费大量时间和大量磁盘空间。请找到以下查询。 “ 更新测试集record_status ='I';” 并且我的列数据类型为“ char(1)”
请向我建议为什么要花费大量时间和大量磁盘空间。
谢谢, 维塔尔
答案 0 :(得分:1)
在PostgreSQL中,UPDATE
创建该行的新版本(“元组”)(例如,参见文档中的this部分)。
因此,通过更新表中的每一行,可以有效地使表的大小增加一倍。自动行删除了旧的行版本,但表的大小保持不变(变为“膨胀”)。
空白空间可以在以后的INSERT
中重新使用,但是如果要消除它,请使用VACUUM (FULL)
。
许多新的元组也解释了持续时间长的问题。增加max_wal_size
可能会减少语句引起的检查点数量,从而对某些人有所帮助。