Transact-SQL 参考

DROP INDEX

从当前数据库中删除一个或多个索引。

DROP INDEX 语句不适用于通过定义 PRIMARY KEY 或 UNIQUE 约束创建的索引(通过分别使用 CREATE TABLE 或 ALTER TABLE 语句的 PRIMARY KEY 或 UNIQUE 选项创建)。有关 PRIMARY 或 UNIQUE KEY 约束的更多信息,请参见本卷中的"CREATE TABLE"或"ALTER TABLE"。

语法

DROP INDEX 'table.index | view.index' [ ,...n ]

参数

table | view

是索引列所在的表或索引视图。若要查看在表或视图上存在的索引列表,请使用 sp_helpindex 并指定表名或视图名称。表名和视图名称必须符合标识符规则。有关更多信息,请参见使用标识符。可以选择是否指定表或视图所有者名称。

index

是要除去的索引名称。索引名必须符合标识符的规则。

n

是表示可以指定多个索引的占位符。

注释

执行 DROP INDEX 后,将重新获得以前由索引占用的空间。此后可将该空间用于任何数据库对象。

在系统表的索引上不能指定 DROP INDEX。

若要除去为实现 PRIMARY KEY 或 UNIQUE 约束而创建的索引,必须除去约束。有关除去约束的更多信息,请参见本卷中的"ALTER TABLE"。

根据是否为表定义了聚集索引,非聚集索引有指向数据行的不同指针。如果有聚集索引,非聚集索引的叶行将使用聚集索引键指向数据行。如果表是堆集,非聚集索引的叶行将使用行指针。如果在有非聚集索引的表上除去聚集索引,将重建所有非聚集索引以用行指针替换聚集索引键。

同样,除去索引视图的聚集索引时,将自动除去同一视图上的所有非聚集索引。

有时,除去并重新创建索引以重新组织索引,例如在大容量装载之后应用新的填充因子或重新组织数据。使用 CREATE INDEX 和 WITH DROP_EXISTING 子句完成这项工作会更有效,尤其对于聚集索引。除去聚集索引将导致重建所有非聚集索引。如果此后重新创建聚集索引,将再次重建非聚集索引以用聚集索引键替换行指针。CREATE INDEX 的 WITH DROP_EXISTING 子句可以对重建进行优化,以避免重建两次非聚集索引的开销。还可以使用 DBCC DBREINDEX,它具有不需要知道索引结构的优点。

权限

默认情况下,将 DROP INDEX 权限授予表所有者,该权限不可转让。然而,db_owner db_ddladmin 固定数据库角色成员或 sysadmin 固定服务器角色成员可以通过在 DROP INDEX 内指定所有者除去任何对象。

示例

下例删除 authors 表内名为 au_id_ind 的索引。

USE pubs
IF EXISTS (SELECT name FROM sysindexes
         WHERE name = 'au_id_ind')
   DROP INDEX authors.au_id_ind
GO

请参见

CREATE INDEX

DBCC DBREINDEX

sp_helpindex

sp_spaceused