2017-08-10 108 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' 
) 

...