用默认值替换 UPDATE SQL vs Drop & Add COLUMN?

Posted

技术标签:

【中文标题】用默认值替换 UPDATE SQL vs Drop & Add COLUMN?【英文标题】:Replacing UPDATE SQL vs Drop & Add COLUMN with default value? 【发布时间】:2015-10-15 15:21:34 【问题描述】:

我需要使用固定文本更新 RDBMS 表 (PostgresSQL) 的所有行的文本列。目前,表有大约 70 万条记录,但预计会增长。 SpringJDBC 批量更新很慢,以下查询,

UPDATE TABLE TABLENAME SET columnname="FIXED VALUE"

此列NULLABLE。是否建议用这两个步骤替换此单个 UPDATE 语句?

1。首先从表中删除此列

2.将列读取到表中,指定默认值为“FIXED VALUE”

我测试了代码,它比 UPDATE 语句快得多。

我只是想问你们,再次删除和添加列的方法是否有任何负面影响?

我通过 SpringJDBC

Java 中运行这些 SQL

【问题讨论】:

【参考方案1】:

postgresql 的问题是每次更新都需要删除和插入操作。这样做 700k 次会非常慢,如果该字段有一个索引可能会更糟糕。

我认为您的方法没有任何问题。我什至重新创建了整个表以进行一些更新。但是你必须小心没有其他人正在使用该表或任何 fk 关系。

CREATE table_backup AS 
   SELECT function(field1), function(field2) ....

DROP table_current;

RENAME table_backup to table_current;

CREATE INDEX and CONSTRAINS TO table_current;

【讨论】:

以上是关于用默认值替换 UPDATE SQL vs Drop & Add COLUMN?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL系列:MySQL加强

SQL语言中add,alter,drop和insert,update,delete的区别?

SQL Server 后悔药 delete drop update

写sql语句时候遇到的一些问题

study mysql

如何用sql语句将一个字段的值加1-MS-SQLServer/疑难问题