由于我是Sql server的新用户,请问有人澄清一下吗?
考虑这个案例,
我有一张表" dbo.test" ,其中包含1亿条记录。
10个select语句正在表" dbo.test" 上运行,每个选项将返回100万条记录。
现在我想在同一张表" dbo.test" 中插入100万条记录。但我不打算选择新数据(我正在插入,我有相应的过滤器)。
这里我可以插入100万,或者需要等待所有的select语句完成。
如果我开始插入,性能如何?
欢迎查询。
答案 0 :(得分:4)
为此,您需要了解sql server中的锁定行为。当资源访问数据库中的资源(行)以进行任何操作时,Sql Server会获取资源锁。
将获得什么类型的锁取决于您正在执行的操作类型以及您拥有的事务隔离级别。
默认情况下,您已读取已提交的事务隔离级别。并且您的读取(选择查询)将获取资源(行)上的共享锁,这意味着同时读取行的其他用户可以访问它们的行。
但是如果另一个用户更新了一行,sql server将在该行上获得一个独占锁,并且在提交更新语句之前它将无法读取。
将行插入具有默认读提交事务隔离级别的表不应对其他用户正在读取的行有任何区别,除非sql server必须锁定某些行以在插入新行时检查条件。这又取决于你如何插入行。
我建议你在继续插入之前先阅读sql server事务隔离级别和sql server锁定行为:)
特别关注可重复读取事务隔离级别,它允许您插入数据,但是您可以进行一些脏读。
答案 1 :(得分:1)
如果您使用的是SQL Server,请使用OUTPUT clause。 为什么你需要选择100万行,这是另一个故事......