Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 添加非聚集索引会锁定我的表吗?_Sql_Sql Server_Sql Server 2008 R2_Indexing - Fatal编程技术网

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

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基本上是一个大小固定的随机短语,由于它,

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

在应用非聚集索引时,添加非聚集索引会锁定表还是会显著降低性能

关于索引的优点/缺点有很多信息,但是我找不到任何信息告诉我在索引操作中会发生什么

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

编辑:这是企业版,根据经验法则,添加索引将改进选择和降低插入。 uniqueidentifier基本上是一个大小固定的随机短语,由于它,索引可以很快地碎片化

对于插入,它将在行级别获得排他锁(这没关系,因为该行正在“构建”),并在页面级别或表级别获得软锁(我不是100%确定,请尝试文档,但您已经知道了)

软锁不是问题,这取决于隔离级别(以及应用于选择的提示)。 如果您使用非常严格的隔离级别,这可能会成为一个问题(我将严格遵守该级别)


不管怎样,我建议你认真读书,做一些酸性测试。这是一个非常复杂的主题,在很大程度上取决于您的特定场景。

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

create index MyIDX on MyTable (MyColumn) with (online = on)
请注意,该操作在过程中(在开始和结束时,IIRC)仍会执行一些锁定,但在索引创建期间不会锁定表。如果您担心,请在非生产环境中启动扩展事件会话,并在创建索引时跟踪创建了哪些锁以及它们存在的时间


更新:关于在线和离线操作的锁有一个很好的解释。

对于我们这些不运行“昂贵版”(Enterprise)的人,答案是:

创建非聚集索引的脱机索引操作获取 桌子上的共享锁。这将阻止对 基础表,但允许读取操作,如选择 声明

因此,基本上,在构建索引时,它将目标表呈现为“只读”。这对于覆盖应用程序来说可能是问题,也可能不是问题——请咨询您的开发团队和用户


PS:是否或为什么应用这样一个索引的问题是一个完全不同的对话。SQL社区及其众多专业博客和SME是您的朋友。

您使用的是什么版本的SQL Server?我以为没有使用向uniqueidentifier/guid字段添加索引?…我想我回答了自己的问题:我已经更新了问题-我们使用的是企业版