本主題描述如何使用 SQL Server Management Studio 或 Transact-SQL 停用 SQL Server 2014 中的索引或條件約束。 停用索引會防止使用者存取索引,而停用叢集索引則會防止存取基礎資料表資料。 索引定義會保留在中繼資料內,而索引統計資料會保留在非叢集索引上。 停用檢視上的非叢集或叢集索引會實際刪除索引數據。 停用數據表上的叢集索引可防止存取數據;數據仍會保留在數據表中,但在卸除或重建索引之前,數據作語言 (DML) 作業無法使用。
本主題內容
開始之前:
若要停用索引,請使用:
開始之前
限制與制約
當索引被停用時,不會進行維護。
建立查詢執行計劃時,查詢優化器不會考慮停用的索引。 此外,使用資料表提示來參考已停用索引的查詢會失敗。
您無法建立與現有停用索引同名的索引。
禁用的索引可刪除。
停用唯一索引時,PRIMARY KEY 或 UNIQUE 條件約束,以及所有參考其他數據表中這些索引欄位的 FOREIGN KEY 條件約束,也會被停用。 停用叢集索引時,基礎表上的所有傳入和傳出的外鍵約束也會被停用。 當索引停用時,會在警告訊息中列出條件約束名稱。 重建索引之後,必須使用 ALTER TABLE CHECK CONSTRAINT 語句手動啟用所有條件約束。
當關聯的叢集索引停用時,非叢集索引也會自動停用。 除非已啟用數據表或檢視表上的叢集索引,或卸除數據表上的叢集索引,否則無法啟用它們。 非叢集索引必須被明確啟用,除非叢集索引已通過使用 ALTER INDEX ALL REBUILD 語句來啟用。
ALTER INDEX ALL REBUILD 語句會重建並啟用資料表上所有停用的索引,但不包括檢視表上的停用索引。 檢視表上的索引必須在個別的 ALTER INDEX ALL REBUILD 語句中啟用。
停用資料表上的叢集索引,也會停用參考該資料表之檢視上的所有叢集和非叢集索引。 這些索引必須重建,就像參考數據表上的索引一樣。
無法存取已停用叢集索引的數據列,除非卸載或重建叢集索引。
當數據表沒有停用的叢集索引時,您可以在在線重建已停用的非叢集索引。 不過,如果您使用 ALTER INDEX REBUILD 或 CREATE INDEX WITH DROP_EXISTING 語句,則必須一律離線重建已停用的叢集索引。 如需在線索引作業的詳細資訊,請參閱 在線執行索引作業。
CREATE STATISTICS 語句無法在已停用叢集索引的數據表上成功執行。
當索引停用且存在下列條件時,AUTO_CREATE_STATISTICS資料庫選項會在數據行上建立新的統計數據:
AUTO_CREATE_STATISTICS 設定為 ON
該資料行沒有現有的統計資料。
查詢最佳化期間需要統計資料。
如果已停用叢集索引, DBCC CHECKDB 就無法傳回基礎表的相關信息;相反地,語句會報告叢集索引已停用。 DBCC INDEXDEFRAG 無法用來重組已停用的索引;語句失敗,並出現錯誤訊息。 您可以使用 DBCC DBREINDEX 來重建已停用的索引。
建立新的叢集索引可啟用先前停用的非叢集索引。 如需詳細資訊,請參閱 Enable Indexes and Constraints。
安全
權限
若要執行 ALTER INDEX,至少需要對表格或檢視具有 ALTER 權限。
使用 SQL Server Management Studio
停用索引
在 [物件總管] 中,按一下加號展開資料庫,展開包含您要停用索引的資料表。
按一下加號展開 [資料表] 資料夾。
按一下加號符號以展開您想要停用索引的資料表。
按一下加號符號展開索引資料夾。
以滑鼠右鍵按一下您要停用的索引,然後選取 [停用]。
在 [ 停用索引] 對話框中,確認正確的索引位於 [要停用的索引 ] 方格中,然後按兩下 [ 確定]。
禁用資料表上的所有索引
在 [物件總管] 中,按一下加號,以展開包含您要停用索引的資料表的資料庫。
按一下加號展開 [資料表] 資料夾。
按一下加號來展開您要停用索引的資料表。
以滑鼠右鍵按一下 [索引] 資料夾,並選取 [全部停用]。
在 [ 停用索引] 對話框中,確認正確的索引位於 [要停用的索引 ] 方格中,然後按兩下 [ 確定]。 若要從 [ 索引] 移除索引以停用 方格,請選取索引,然後按 Delete 鍵。
[停用索引] 對話方塊中提供下列資訊:
指數名稱
顯示索引的名稱。 在執行期間,此資料行也會顯示代表其狀態的圖示。
資料表名稱
顯示建立索引的資料表名稱或檢視名稱。
索引類型
顯示索引的類型:[叢集]、[非叢集]、[空間] 或 [XML]。
狀態
顯示停用作業的狀態。 執行之後可能的值:
空白
執行前 的狀態 為空白。
進行中
索引的停用已開始,但尚未完成。
成功
已成功地完成停用作業。
錯誤
索引停用作業期間發生錯誤,且作業未順利完成。
已停止
因為使用者停止作業,因此索引的停用未順利完成。
訊息
提供停用操作期間錯誤訊息的具體內容。 在執行期間,會以超連結顯示錯誤。 超連結的文字會描述錯誤的主體。
[訊息] 資料行通常寬度不足以讀取完整訊息文字。 取得完整文字有兩種方式:
將滑鼠指標移至訊息儲存格上方,以顯示含有錯誤文字的工具提示。
按一下超連結以顯示完整錯誤的對話框。
使用 Transact-SQL
停用索引
在物件總管中,連線到資料庫引擎實例。
在標準列上,按一下 [新增查詢] 。
複製下列範例並將其貼到查詢視窗中,然後按一下 [執行] 。
USE AdventureWorks2012; GO -- disables the IX_Employee_OrganizationLevel_OrganizationNode index -- on the HumanResources.Employee table ALTER INDEX IX_Employee_OrganizationLevel_OrganizationNode ON HumanResources.Employee DISABLE;
停用資料表上的所有索引
在物件總管中,連線到資料庫引擎實例。
在標準列上,按一下 [新增查詢] 。
複製下列範例並將其貼到查詢視窗中,然後按一下 [執行] 。
USE AdventureWorks2012; GO -- Disables all indexes on the HumanResources.Employee table. ALTER INDEX ALL ON HumanResources.Employee DISABLE;
如需詳細資訊,請參閱 ALTER INDEX (Transact-SQL)。