当创建索引时对其他用户会话有何影响?
英文原文:
如果你正在一个存在数据的表上创建新的索引,所有存在的行将会被索引作为CREATE INDEX语句的一部分。如果表非常大,索引过程将会花费些时间。索引过程对其他用户会话的影响,基于SQL Server
是使用Offline模式还是Online模式。
默认,SQL Server以Offline模式执行索引操作,索引操作期间有表锁请求。一个离线索引操作,创建、重建、或删除一个聚集索引,或者重建或删除一个非聚集索引,需要一个表上的架构修改(Sch-M
)锁。这阻止了所有用户在操作期间访问相应表。对一个离线索引操作,创建一个非聚集索引,在表上申请一个共享(S)锁。他阻止了对相关表的更新但是允许读操作,例如SELECT语句。
SQL Server Enterprise 版支持在线模式索引操作,其他的用户会话就不会被影响。
然而,SQL Server Express 版不支持在线模式。如果你尝试,你会获得以下错误:
CREATE INDEX fyi_links_url ON fyi_links_indexed (url) WITH (ONLINE = ON); GO
Online index operations can only be performed in Enterprise edition of SQL Server.