我有一个数据库表,它有一个列,经常(相对)更新。
问题是:
通过首先读取对象(SELECT ... WHERE
)并比较值来确定是否需要更新,是否更有效地避免始终写入数据库
或者总是发出更新(UPDATE ... WHERE
)而不检查当前状态。
我认为第一种方法会更麻烦,因为它包含两个数据库操作,而不仅仅是一个,但我们也可以避免不必要的写入。
我还质疑我们是否应该考虑这个问题,因为我们的数据库很可能不会很快达到此表中的100k记录,因此即使更新成本更高,也不会成为问题,但是如果我错了,请纠正我。
数据库是PostgreSQL 9.6
答案 0 :(得分:1)
如果您只执行必要的更新,它将避免数据库上的I / O负载。
您可以使用UPDATE
添加测试,例如
UPDATE mytable
SET mycol = 'avalue'
WHERE id = 42
AND mycol <> 'avalue';
唯一的缺点是除非值真的发生变化,否则不会调用触发器。