2

下面是我们在 2MM 记录表 (SQL Server 2005) 上的索引混乱的一部分。显然,有机会将它们击倒。该表总共有 16 个索引,包括一个聚集的 PK on [MemberID], [RegistryID],[end_date],但我只列出了似乎可以合并的那些。

[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])
4

2 回答 2

2

如果你删除一些索引并再次运行查询,它将重新编译一个新的执行计划,可能会使用一些剩余的索引,也可能不会。是一个测试问题,看看哪个动作最有帮助,或者相反,会毁掉所有的性能。

在谈论索引时,这些脚本肯定会很方便地做出决定:

它们一起提供了大量关于索引、重复、未使用、统计信息、等待状态、I/O 使用等当前状态的信息。根据这些信息,您可以进行更准确的分析并选择最佳选项。

于 2013-05-03T21:16:32.173 回答
0

当源发生某些类型的更改时,查询计划将失效。这将包括删除它正在使用的任何索引。不使用无效的查询计划。

未能在缓存中找到有效的匹配查询计划,挂起的查询只会创建一个新的...

于 2013-05-03T21:12:33.967 回答