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)仍然会执行某些锁定,但在创建索引期间不会锁定表.如果您担心,请在非生产环境中启动扩展事件会话,并在创建索引时跟踪创建的锁以及它们存在的时间.
更新:该文档非常好地阐述了在线和离线操作时锁定的内容.