我正在使用 SQL Server 2008,我有两个具有相同架构的表,我创建了一个 View ,该 View 合并了两个表的内容,以便为外部访问提供“表”的单一 View 。
其中一个表是只读的,另一个表包含批量插入/删除操作(在另一个表上,我将在某个时间间隔使用批量插入来插入几千行并运行另一个 SQL 作业以删除几百万行每天)。
我的问题是,如果对另一张表进行批量插入/删除操作,物理表是否会被锁定,从而阻止外部用户访问两张表的联合 View ? (我在想锁升级是否适用于这种场景,行锁最终锁定表,从而最终锁定 View 的访问?)
最佳答案
if the other table is under bulk insert/delete operation, will the physical table be locked so that the access from external user to the union view of two tables are also blocked?
是的,需要注意的是,如果优化器可以找到一种方法来执行不涉及访问批量插入表的查询,那么访问将不会被阻止。
如果您希望优化批量加载时间,请确保阅读 this blog post .
编辑
您遇到的实际问题是什么?你真的需要在任何地方都使用这个 View 吗(例如,是否有一些地方只需要一个表中的数据,通过 View 查询它?)
如果您希望您的 View 始终处于“在线”状态,请考虑快照隔离,或者如果您要将完整集加载到批量表中(例如,每天更换完整内容),您可以将数据加载到一个分离表并在(事务中)sp_rename 表
关于sql-server - 数据库 View 性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/979896/