Sql 添加非聚集索引会锁定我的表吗?
我的表中有大约200万条记录,我需要向uniqueidentifier添加一个新的非聚集索引以提高查询性能 在应用非聚集索引时,添加非聚集索引会锁定表还是会显著降低性能 关于索引的优点/缺点有很多信息,但是我找不到任何信息告诉我在索引操作中会发生什么 我正在运行SQL Server 2008 R2(在Windows Server 2008上,如果这很重要的话) 编辑:这是企业版,根据经验法则,添加索引将改进选择和降低插入。 uniqueidentifier基本上是一个大小固定的随机短语,由于它,索引可以很快地碎片化 对于插入,它将在行级别获得排他锁(这没关系,因为该行正在“构建”),并在页面级别或表级别获得软锁(我不是100%确定,请尝试文档,但您已经知道了) 软锁不是问题,这取决于隔离级别(以及应用于选择的提示)。 如果您使用非常严格的隔离级别,这可能会成为一个问题(我将严格遵守该级别)Sql 添加非聚集索引会锁定我的表吗?,sql,sql-server,sql-server-2008-r2,indexing,Sql,Sql Server,Sql Server 2008 R2,Indexing,我的表中有大约200万条记录,我需要向uniqueidentifier添加一个新的非聚集索引以提高查询性能 在应用非聚集索引时,添加非聚集索引会锁定表还是会显著降低性能 关于索引的优点/缺点有很多信息,但是我找不到任何信息告诉我在索引操作中会发生什么 我正在运行SQL Server 2008 R2(在Windows Server 2008上,如果这很重要的话) 编辑:这是企业版,根据经验法则,添加索引将改进选择和降低插入。 uniqueidentifier基本上是一个大小固定的随机短语,由于它,
不管怎样,我建议你认真读书,做一些酸性测试。这是一个非常复杂的主题,在很大程度上取决于您的特定场景。在Enterprise Edition中,您可以进行在线索引操作。它看起来像这样:
create index MyIDX on MyTable (MyColumn) with (online = on)
请注意,该操作在过程中(在开始和结束时,IIRC)仍会执行一些锁定,但在索引创建期间不会锁定表。如果您担心,请在非生产环境中启动扩展事件会话,并在创建索引时跟踪创建了哪些锁以及它们存在的时间
更新:关于在线和离线操作的锁有一个很好的解释。对于我们这些不运行“昂贵版”(Enterprise)的人,答案是: 创建非聚集索引的脱机索引操作获取 桌子上的共享锁。这将阻止对 基础表,但允许读取操作,如选择 声明 因此,基本上,在构建索引时,它将目标表呈现为“只读”。这对于覆盖应用程序来说可能是问题,也可能不是问题——请咨询您的开发团队和用户
PS:是否或为什么应用这样一个索引的问题是一个完全不同的对话。SQL社区及其众多专业博客和SME是您的朋友。您使用的是什么版本的SQL Server?我以为没有使用向uniqueidentifier/guid字段添加索引?…我想我回答了自己的问题:我已经更新了问题-我们使用的是企业版