我们有一个SQL Server 2005数据库,其中包含报告的预处理数据。
根据生产数据库中的数据,每晚都会删除所有数据并从头开始重建。
在夜间,作业是该服务器上唯一运行的内容,因此我无法同时访问我的数据。
我们目前正在使用默认的READ_COMMITTED
隔离级别。
据我所知,SQL Server会在表上放置锁,用于读写。由于在我的工作正在运行时没有其他人接触我的表(我读过的表和我写的表),指定WITH (NOLOCK)
或使用独占表锁(TABLOCKX)
会更快吗?
感谢任何提示,
伊夫
答案 0 :(得分:2)
您可能不会注意到CPU使用率方面的任何差异。 READ COMMITTED
甚至不会对位于没有未提交行的页面上的行进行S锁定。对于非常常见的READ COMMITTED
隔离级别,这是SQL Server中一个鲜为人知的优化。
我建议您考虑READ UNCOMMITTED
(完全等同于NOLOCK
)或TABLOCK
,因为它允许SQL Server按分配顺序(IAM扫描)扫描表,而不是逻辑索引顺序。这对于IO模式是有好处的,并且取决于碎片的程度可以产生重大影响(或者根本没有)。
对于批量写入,请查看Microsoft提供的相关指南。确保您利用最少日志记录。 TABLOCKX
可以在这里发挥作用。