我的表中有重复索引,想要删除重复项。
如果另一个索引存在,我想写一个脚本从一对中删除一个索引。
这是我的问题:
IF EXISTS (SELECT * FROM sysindexes WHERE name = 'IX_mDate')
BEGIN TRY
DROP INDEX IX_Ma ON MarkTo
Print 'Dupliate Index has been removed'
END TRY
BEGIN CATCH
PRINT error_message()
END CATCH
此查询的问题在于,即使没有其他重复索引,也会继续删除剩余索引。我怎样才能实现我们所寻找的目标?另外,有没有办法在一个查询中逐个删除索引?
我有点卡住,我的客户已经在哀悼。这些重复索引正在扼杀性能。
答案 0 :(得分:1)
在EXISTS
表达式中包含两个索引。
IF EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.Mark') AND name = 'IX_MtmDate')
AND EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.Mark') AND name = 'IX_Mark')
BEGIN TRY
DROP INDEX IX_Mark ON Mark
Print 'Dupliate Index has been removed'
END TRY
BEGIN CATCH
PRINT error_message()
END CATCH