在SQL Server生产表上创建非聚集索引,而不在脱机模式下锁定读取和插入

时间:2016-03-03 11:51:48

标签: sql-server indexing sql-server-2014

考虑一个由用户定期查询的数百万行的表,并且后端软件不断生成插入。

有没有办法在datetime数据类型上为此表添加新的非聚集索引,而不会在保持索引处于脱机模式的同时从用户锁定INSERTSELECT

目标是用户和后端始终可以访问此表。

我知道对现有索引的操作要求索引操作在线以防止锁定,但如果仅创建非聚集索引,则脱机模式是否仍会查询表锁定,从而锁定SELECT和{ {1}}陈述?

1 个答案:

答案 0 :(得分:1)

如果需要脱机创建非聚簇索引,则在创建索引的持续时间内应用表锁时,无法将影响降至最低。唯一的选择是使用新索引创建表的副本并复制数据。如果表不断更新,您可以添加触发器以使两个表保持同步。在最终部署期间,您可以删除触发器并在事务中重命名表。这仍将在重命名期间锁定表,但是,重命名非常快,并且最终的锁定应该是最小的。