在SQL Server 2005表上创建非聚簇索引是否会阻止选择?

时间:2009-12-16 17:49:35

标签: sql-server indexing locking

我想在我拥有的视图上创建一个索引但是我需要确保在创建索引时仍然可以读取数据。我正在阅读article,建议在创建非聚集索引时,如果指定ONLINE = ON选项,数据仍然可读(下面的示例):

CREATE UNIQUE CLUSTERED INDEX CLUST_IDX_SQLTIPS
ON SQLTips (tip) with (ONLINE=ON) 

我是否理解正确?在创建索引之前,在创建索引时需要读取的索引之前是否有任何潜在的问题需要注意?

2 个答案:

答案 0 :(得分:14)

仅在Enterprise Edition上提供在线索引创建和重建。请参阅How Online Index Operations WorkGuidelines for Performing Online Index Operations

有一些限制,最值得注意的是:

    如果
  • 聚簇索引包含任何BLOB字段(image,ntext,text,varchar(max),nvarchar(max),varbinary(max)和xml),则必须脱机创建/重建。
  • 必须离线创建视图上的初始聚集索引。

您必须确保您的数据库有足够的空间来执行在线索引操作,因为它需要 addition 中表格大小的1.5倍到当前大小。在联机索引创建期间,表在数据库中存在两次,因此需要额外的空间。

由于您的案例属于排除类别(视图中的初始聚集索引),因此您无需担心在线索引。您必须使用脱机索引操作。

顺便说一下,您还必须知道,仅在Enterprise Edition中,优化程序会考虑索引视图。在较低版本中,必须在视图中指定NOEXPAND子句以利用视图上的可能索引。

答案 1 :(得分:2)

有关CREATE INDEXonline index operations的msdn文章的更多信息,其中包含大量有关它的信息。

如果你只做SELECTs和UPDATEs,它应该没有问题。备份不太确定,也许最好在测试系统上试一试,看看?