考虑一个由用户定期查询的数百万行的表,并且后端软件不断生成插入。
有没有办法在datetime数据类型上为此表添加新的非聚集索引,而不会在保持索引处于脱机模式的同时从用户锁定INSERT
和SELECT
?
目标是用户和后端始终可以访问此表。
我知道对现有索引的操作要求索引操作在线以防止锁定,但如果仅创建非聚集索引,则脱机模式是否仍会查询表锁定,从而锁定SELECT
和{ {1}}陈述?
答案 0 :(得分:1)
如果需要脱机创建非聚簇索引,则在创建索引的持续时间内应用表锁时,无法将影响降至最低。唯一的选择是使用新索引创建表的副本并复制数据。如果表不断更新,您可以添加触发器以使两个表保持同步。在最终部署期间,您可以删除触发器并在事务中重命名表。这仍将在重命名期间锁定表,但是,重命名非常快,并且最终的锁定应该是最小的。