将添加非聚集索引锁定我的表吗?

dav*_*nts 13 sql sql-server indexing sql-server-2008-r2

我有一个包含大约200万条记录的表,我需要在uniqueidentifier中添加一个新的非聚簇索引,以提高查询性能.

添加非聚集索引是否会锁定表格,否则会在应用时显着降低性能?

有很多关于索引的好处/缺陷的信息,但我找不到任何告诉我索引操作期间发生的事情

我正在运行SQL Server 2008 R2(在Windows Server 2008上,如果这很重要)

编辑:这是企业版

Nat*_*teJ 22

对于我们这些没有运行"昂贵版"(企业版)的人来说,答案是这样的:

创建非聚集索引的脱机索引操作会获取表上的共享(S)锁.这可以防止更新基础表,但允许读取操作,例如SELECT语句.

所以基本上它在构建索引时呈现目标表"只读".对于您的覆盖应用程序,这可能是也可能不是问题 - 请与您的开发团队和用户核实!

PS:应用这样一个索引是否或为什么的问题是一个完全不同的对话.SQL社区及其专业博主和中小企业团队是您的朋友.


Ben*_*hul 16

在Enterprise Edition中,您可以进行在线索引操作.它看起来像这样:

create index MyIDX on MyTable (MyColumn) with (online = on)
Run Code Online (Sandbox Code Playgroud)

请注意,该操作在此过程中(在开始和结束时,IIRC)仍然会执行某些锁定,但在创建索引期间不会锁定表.如果您担心,请在非生产环境中启动扩展事件会话,并在创建索引时跟踪创建的锁以及它们存在的时间.

更新:该文档非常好地阐述了在线和离线操作时锁定的内容.