下面是我们在2MM记录表(SQL Server 2005)上的索引混乱的一部分。显然,有机会让他们失望。这个表共有16个索引,包括[MemberID], [RegistryID],[end_date]
上的聚簇PK,但我只列出了似乎是合并的候选者。
我很想放弃[ix_IndexName7]
例如,因为它是多余的。但根据sys.dm_db_index_usage_stats
,它似乎是在某个查询计划或其他计划中。
这是我的问题。假设我放弃[ix_IndexName7]
或[ix_IndexName30]
(我认为[idxMemberRegistry1]
涵盖了这一点)。当查询计划尝试查找[ix_IndexName7]
而不能查找时,优化程序是否会神奇地合并其中一个第一列为[MemberID]
的其他索引?或者我将不得不找到使用该表的任何SP /视图/函数并重新编译它们(这可能很糟糕,因为可能存在垃圾邮件)。或其他什么?
我希望这个问题很明确。我很感激任何意见!
CREATE NONCLUSTERED INDEX [idx_RegistryID] ON [dbo].[Member_Registry] ([RegistryId], [end_date], [MemberId])
CREATE UNIQUE NONCLUSTERED INDEX [idx_MemberID] ON [dbo].[Member_Registry] ([MemberId], [RegistryId], [end_date]) INCLUDE ([Due_Date])
CREATE NONCLUSTERED INDEX [ix_IndexName7] ON [dbo].[Member_Registry] ([end_date]) INCLUDE ([MemberId])
CREATE NONCLUSTERED INDEX [ix_IndexName11] ON [dbo].[Member_Registry] ([end_date]) INCLUDE ([MemberId], [RegistryId])
CREATE NONCLUSTERED INDEX [ix_IndexName16] ON [dbo].[Member_Registry] ([end_date]) INCLUDE ([ContinuousEnrol], [MemberId], [RegistryId])
CREATE NONCLUSTERED INDEX [ix_IndexName30] ON [dbo].[Member_Registry] ([end_date]) INCLUDE ([MemberId], [P4P_Patient], [RegistryId])
CREATE NONCLUSTERED INDEX [ix_IndexName29] ON [dbo].[Member_Registry] ([end_date], [ContinuousEnrol]) INCLUDE ([MemberId], [RegistryId])
CREATE NONCLUSTERED INDEX [idxMemberRegistry1] ON [dbo].[Member_Registry] ([end_date], [MemberId], [RegistryId]) INCLUDE ([COL_D2yr], [ContinuousEnrol], [P4P_AAB], [P4P_ACE], [P4P_CERVICAL], [P4P_Chlamydia], [P4P_COL], [P4P_DGX], [P4P_DIU], [P4P_MAMMO], [P4P_Patient], [start_date])
CREATE NONCLUSTERED INDEX [idx_AllPatients] ON [dbo].[Member_Registry] ([MemberId], [RegistryId], [end_date]) INCLUDE ([EXCLUSION_STATUS], [P4P_Patient])
CREATE NONCLUSTERED INDEX [idx_Exclusion_Status] ON [dbo].[Member_Registry] ([MemberId], [RegistryId], [EXCLUSION_STATUS])
答案 0 :(得分:2)
如果删除一些索引并再次运行查询,它将重新编译一个新的执行计划,可能会使用其余的一些索引,也许不会。是一个测试的问题,看看哪个行动会有所帮助,相反,会破坏所有的表现。
这些脚本肯定会在谈论索引时做出决定:
它们共同提供了有关索引的当前状态,重复项,未使用的,统计信息,等待状态,I / O使用等的大量信息。根据这些信息,您可以进行更有效的分析,并选择最佳选择。
答案 1 :(得分:0)
当其来源发生某些类型的更改时,查询计划无效。这将包括删除它正在使用的任何索引。未使用未经验证的查询计划。
未能在缓存中找到有效的匹配查询计划,待处理的查询只会创建一个新的...