什么更有效率?读写如果......或总是写入db?

时间:2017-07-10 08:39:52

标签: django database postgresql

我有一个数据库表,它有一个列,经常(相对)更新。

问题是:

通过首先读取对象(SELECT ... WHERE)并比较值来确定是否需要更新,是否更有效地避免始终写入数据库

或者总是发出更新(UPDATE ... WHERE)而不检查当前状态。

我认为第一种方法会更麻烦,因为它包含两个数据库操作,而不仅仅是一个,但我们也可以避免不必要的写入。

我还质疑我们是否应该考虑这个问题,因为我们的数据库很可能不会很快达到此表中的100k记录,因此即使更新成本更高,也不会成为问题,但是如果我错了,请纠正我。

数据库是PostgreSQL 9.6

1 个答案:

答案 0 :(得分:1)

如果您只执行必要的更新,它将避免数据库上的I / O负载。

您可以使用UPDATE添加测试,例如

UPDATE mytable
SET mycol = 'avalue'
WHERE id = 42
  AND mycol <> 'avalue';

唯一的缺点是除非值真的发生变化,否则不会调用触发器。