Gri*_*cey 2 postgresql postgresql-performance
我需要修复 Postgresql 数据库中的一些数据问题,其中主要是从文本列中修剪空格。我正在使用如下语句执行此操作:
UPDATE app.products
SET "description" = TRIM(BOTH FROM "description")
Run Code Online (Sandbox Code Playgroud)
在测试数据库上发出这个返回UPDATE 2000
. 测试表包含 2000 行,其中只有 1 行实际上会随着空白修剪而改变。这是否会导致 Postgres 创建新的、不必要的元组?添加 WHERE 子句会有好处吗?大多数目标列都没有编入索引。
UPDATE app.products
SET "description" = TRIM(BOTH FROM "description")
WHERE "description" LIKE ' %' OR "description" LIKE '% '
Run Code Online (Sandbox Code Playgroud)
是的,这将修改所有行,即使值没有改变。
如果您想避免这种情况,请使用WHERE
条件:
UPDATE app.products
SET "description" = TRIM(BOTH FROM "description")
WHERE "description" IS DISTINCT FROM TRIM(BOTH FROM "description");
Run Code Online (Sandbox Code Playgroud)
或者使用suppress_redundant_updates_trigger()
触发器函数BEFORE UPDATE
在表上定义触发器。
避免不必要的更新将提高性能并减少表膨胀。