在更新表中的所有行时,锁定方法是否具有性能?

时间:2010-06-06 16:41:49

标签: sql locking

问题是this的后续行动。

有问题的SQL是

UPDATE stats SET visits = (visits+1)

问题是,出于性能的目的,与锁定表stats相比,锁定stats中的所有行是否重要?或者,如果数据库使用页锁而不是表/行锁?

2 个答案:

答案 0 :(得分:3)

没有关于此的断言。任何自我尊重的数据库引擎都应该解决这个问题并实现所有行都需要更新。

一般来说,不要再猜测数据库引擎:性能主观上是相同的。

就个人而言,

  • 我不会使用表格或锁定提示,除非我必须知道我为什么要这样做。
  • 我不会从没有WHERE子句的应用程序发出这样的查询

答案 1 :(得分:2)

理论上你应该锁定表,因为1个锁比1M锁便宜。

但是,许多数据库会为这样的操作提升锁定。当他们看到锁扩展时,它们会自动升级到页锁和表锁。

但是,与任何事情一样,“它取决于”,并且最好具体并自己锁定表格。

编辑:

叹息

Postgres示例:

LOCK TABLE mytable IN EXCLUSIVE MODE;
UPDATE mytable SET field = field + 1;
COMMIT;

这是交易。这将会发生,无论如何,LOCK TABLE命令使它更加明确,并确保在进程发生之前,锁定表的意图是清晰且有能力的。

我会在10排桌子上这样做吗?没有。

我会在一个我无法独家访问的数据库上执行此操作吗?不,没有必要。

我是否会在具有大量行的表的操作数据库上执行此操作?你敢打赌。