SQL Server:检查索引是否存在需要很长时间
问题描述:
我正在编写一条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
答
假设你的数据库很大,这将是更快获得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'
)
...
检查运行该语句时发生的阻塞情况。你可以从这个'select top 1000 r.session_id,r.blocking_session_id,r.wait_type,r.status,r.command和 from sys.dm_exec_requests r' – Xedni
定义“很长时间”。表格有多大,索引有多大? – pmbAustin