从当前数据库中删除一个或多个索引。
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