從當(dāng)前數(shù)據(jù)庫(kù)中刪除一個(gè)或多個(gè)索引。
DROP INDEX 語(yǔ)句不適用于通過(guò)定義 PRIMARY KEY 或 UNIQUE 約束創(chuàng)建的索引(通過(guò)分別使用 CREATE TABLE 或 ALTER TABLE 語(yǔ)句的 PRIMARY KEY 或 UNIQUE 選項(xiàng)創(chuàng)建)。有關(guān) PRIMARY 或 UNIQUE KEY 約束的更多信息,請(qǐng)參見(jiàn)本卷中的"CREATE TABLE"或"ALTER TABLE"。
DROP INDEX 'table.index | view.index' [ ,...n ]
table | view
是索引列所在的表或索引視圖。若要查看在表或視圖上存在的索引列表,請(qǐng)使用 sp_helpindex 并指定表名或視圖名稱。表名和視圖名稱必須符合標(biāo)識(shí)符規(guī)則。有關(guān)更多信息,請(qǐng)參見(jiàn)使用標(biāo)識(shí)符??梢赃x擇是否指定表或視圖所有者名稱。
index
是要除去的索引名稱。索引名必須符合標(biāo)識(shí)符的規(guī)則。
n
是表示可以指定多個(gè)索引的占位符。
執(zhí)行 DROP INDEX 后,將重新獲得以前由索引占用的空間。此后可將該空間用于任何數(shù)據(jù)庫(kù)對(duì)象。
在系統(tǒng)表的索引上不能指定 DROP INDEX。
若要除去為實(shí)現(xiàn) PRIMARY KEY 或 UNIQUE 約束而創(chuàng)建的索引,必須除去約束。有關(guān)除去約束的更多信息,請(qǐng)參見(jiàn)本卷中的"ALTER TABLE"。
根據(jù)是否為表定義了聚集索引,非聚集索引有指向數(shù)據(jù)行的不同指針。如果有聚集索引,非聚集索引的葉行將使用聚集索引鍵指向數(shù)據(jù)行。如果表是堆集,非聚集索引的葉行將使用行指針。如果在有非聚集索引的表上除去聚集索引,將重建所有非聚集索引以用行指針替換聚集索引鍵。
同樣,除去索引視圖的聚集索引時(shí),將自動(dòng)除去同一視圖上的所有非聚集索引。
有時(shí),除去并重新創(chuàng)建索引以重新組織索引,例如在大容量裝載之后應(yīng)用新的填充因子或重新組織數(shù)據(jù)。使用 CREATE INDEX 和 WITH DROP_EXISTING 子句完成這項(xiàng)工作會(huì)更有效,尤其對(duì)于聚集索引。除去聚集索引將導(dǎo)致重建所有非聚集索引。如果此后重新創(chuàng)建聚集索引,將再次重建非聚集索引以用聚集索引鍵替換行指針。CREATE INDEX 的 WITH DROP_EXISTING 子句可以對(duì)重建進(jìn)行優(yōu)化,以避免重建兩次非聚集索引的開(kāi)銷。還可以使用 DBCC DBREINDEX,它具有不需要知道索引結(jié)構(gòu)的優(yōu)點(diǎn)。
默認(rèn)情況下,將 DROP INDEX 權(quán)限授予表所有者,該權(quán)限不可轉(zhuǎn)讓。然而,db_owner 和 db_ddladmin 固定數(shù)據(jù)庫(kù)角色成員或 sysadmin 固定服務(wù)器角色成員可以通過(guò)在 DROP INDEX 內(nèi)指定所有者除去任何對(duì)象。
下例刪除 authors 表內(nèi)名為 au_id_ind 的索引。
USE pubs相關(guān)文章
IF EXISTS (SELECT name FROM sysindexes
WHERE name = 'au_id_ind')
DROP INDEX authors.au_id_ind
GO