我有一张桌子可容纳大约50M行。我想执行一个简单的UPDATE查询:Postgres - 没有实际的更新,是否有副作用?
UPDATE the_table SET flag = true;
对于这些行的99%,该标志已被设置为true。所以只有1%的行必须改变。
我的问题是:是Postgres足够聪明知道这一点?或者Postgres会改变这些99%的行,这将导致典型的过程,比如WAL,自动真空,重新索引,同步到奴隶......,对于整个表而言,而不仅仅是这些1%的行。
换句话说,下面的查询是否更安全?
UPDATE the_table SET flag = true WHERE flag = false;
它将更新所告知的行数。在你没有'where'的情况下它会更新所有的行,所以肯定要去第二条语句 –
必须使用where子句,否则所有的行都会受到影响。 – klin