卸除索引
當您不再需要索引時,可以從資料庫移除該索引,並且回收該索引目前所使用的磁碟空間。資料庫中的任何物件都可以使用此回收的空間。刪除索引和卸除索引都是同步作業。
若未先卸除 PRIMARY KEY 或 UNIQUE 條件約束,就無法卸除這些條件約束所使用的索引。例如,透過修改索引來修改索引所使用的填滿因數,基本上,就可以卸除和重新建立 PRIMARY KEY 或 UNIQUE 條件約束所使用的索引,而不需卸除和重新建立條件約束。如需重建索引的詳細資訊,請參閱<重新組織和重建索引>。
重建索引而不卸除和重新建立它,對於重新建立叢集索引也非常有用。這是因為重建索引的過程中,如果資料已是排序的順序,就不需要依索引資料行排序資料。
當卸除檢視或資料表時,也會自動一併卸除建立在任何檢視或資料表上的永久及暫存的索引。
[!附註]
如果您擁有該資料表的 ALTER 權限,就可以卸除索引。
叢集索引
當卸除叢集索引時,儲存在叢集索引分葉層級的資料列將儲存在未排序的資料表中 (堆積)。卸除叢集索引有可能很費時,因為除了卸除叢集索引以外,資料表上所有的非叢集索引都必須重建,才能以堆積的資料列指標取代叢集索引鍵。當您卸除資料表上的所有索引時,請先卸除非叢集索引,最後再卸除叢集索引。如此一來,就不需要重建任何索引。如需叢集與非叢集索引之間關聯性的詳細資訊,請參閱<非叢集索引結構>。
在線上卸除作業期間或是在指定 MOVE TO 子句時,暫存磁碟空間需要卸除叢集索引。如需詳細資訊,請參閱<索引 DDL 作業的磁碟空間需求>。
當卸除索引檢視的叢集索引時,會自動卸除相同檢視的所有非叢集索引和自動建立的統計資料。不會卸除手動建立的統計資料。
使用 MOVE TO 子句
您可以卸除叢集索引,並指定 MOVE TO 選項,以便在單一交易中,將產生的未排序資料表 (堆積) 移動到另一個檔案群組或資料分割配置。MOVE TO 選項有下列限制:
它對索引檢視或非叢集檢視是無效的。
指定的資料分割配置或檔案群組必須已經存在。
如果未指定 MOVE TO,產生的資料表將在為叢集索引所定義的同一個資料分割配置或檔案群組中。
線上卸除叢集索引
在卸除叢集索引時,可以指定 ONLINE 選項。當設定為 ON 時,DROP INDEX 交易不會封鎖對於基礎資料及關聯的非叢集索引之查詢和修改。如需詳細資訊,請參閱<線上執行索引作業>。
當設定為 ON 時,ONLINE 選項具有下列限制:
一次只能卸除一個索引。
它對停用的叢集索引是無效的。
它對檢視上的叢集索引,或是資料表或檢視上的非叢集索引是無效的。
包含分頁層級資料列中的 text、ntext、image、varchar(max)、nvarchar(max)、varbinary(max) 或 xml 資料行之叢集索引,將無法在線上卸除。
設定 MAXDOP 索引選項
您可以指定 MAXDOP 索引選項,針對卸除索引作業覆寫 sp_configure 的 max degree of parallelism 組態選項。如需詳細資訊,請參閱<設定平行索引作業>。
全文檢索索引
您無法卸除指定為資料表之全文檢索索引鍵的索引。檢視索引屬性即可決定索引是否為全文檢索索引鍵。如需詳細資訊,請參閱<INDEXPROPERTY (Transact-SQL)>。
若要卸除索引
範例
A. 卸除索引
下列範例會在 ProductVendor 資料表上建立 IX_ProductVendor_VendorID 索引。
USE AdventureWorks2008R2;
GO
DROP INDEX IX_ProductVendor_BusinessEntityID
ON Purchasing.ProductVendor;
GO
B. 在 ONLINE 模式中卸除叢集索引
下列範例將 ONLINE 選項設為 ON 以卸除叢集索引。產生的未排序資料表 (堆積) 是儲存在與儲存索引相同的檔案群組中。
USE AdventureWorks2008R2;
GO
DROP INDEX AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate
ON Production.BillOfMaterials WITH (ONLINE = ON, MAXDOP = 2);
GO