如何避免数据库中的读锁定?

时间:2008-08-31 20:54:19

标签: sql database performance locking

如何避免数据库中的读锁?

欢迎多个数据库的答案!

5 个答案:

答案 0 :(得分:3)

在SQL Server中,您可以在select语句中使用with(nolock)关键字。例如:

Select table1.columna, table2.columna
from table1 with(nolock), table2 with(nolock)

确保为查询中的每个表/视图指定(nolock)。

答案 1 :(得分:2)

Jeff Atwood在这个主题上有一篇好文章:

http://www.codinghorror.com/blog/archives/001166.html

答案 2 :(得分:2)

在Oracle中,默认操作模式是 Read committed 隔离级别,其中select语句不会被修改其正在读取的数据的另一个事务阻止。 来自Data Concurrency and Consistency

  

事务执行的每个查询只能查看在查询(而不是事务)开始之前提交的数据。 Oracle查询永远不会读取脏(未提交)数据。

答案 3 :(得分:2)

在Firebird中,编写者从不阻止读者,也没有脏读。仅读取提交和快照隔离级别 它使用多代引擎(比如我相信的oracle)而不是简单的页面或记录锁定。

答案 4 :(得分:2)

PostgreSQL也使用MVCC(多版本并发控制),所以使用默认的事务隔离级别(read-committed),你永远不应该阻塞,除非有人在数据库上进行维护(删除/添加列/表/索引) / etc)。