2017-08-10 187 views
0

我正在編寫一條SQL語句來刪除索引(如果存在)。SQL Server:檢查索引是否存在需要很長時間

當我運行它在SSMS它花費很長的時間

IF EXISTS (SELECT * 
      FROM sys.indexes 
      WHERE object_id = object_id('Parties') 
      AND NAME ='Ix_Parties_Position') 
    DROP INDEX Ix_Parties_Position ON Parties 
+1

檢查運行該語句時發生的阻塞情況。你可以從這個'select top 1000 r.session_id,r.blocking_session_id,r.wait_type,r.status,r.command和 from sys.dm_exec_requests r' – Xedni

+0

定義「很長時間」。表格有多大,索引有多大? – pmbAustin

回答

0

假設你的數據庫很大,這將是更快獲得SELECT語句外OBJECT_ID。如果你有很多索引,那麼object_id不斷得到每個索引的評估,這是沒有必要的。另外,在EXISTENCE檢查中不需要SELECT *,因此使用數字1可以避免從sys.indexes表中返回所有列。

DECLARE @ID int = object_id('Parties') 

IF EXISTS 
(
    SELECT 1 FROM sys.indexes 
    WHERE object_id = @ID 
     AND name = 'Ix_Parties_Position' 
) 

...