以下は、2MM レコード テーブル (SQL Server 2005) で発生したインデックスの混乱の一部です。明らかに、それらを切り詰める機会があります。このテーブルには、 上のクラスター化された PK を含む、全部で 16 のインデックスがありますが[MemberID], [RegistryID],[end_date]
、統合の候補と思われるものだけをリストしました。
[ix_IndexName7]
余計なことなので、たとえば落としたくなる。しかし、それによるsys.dm_db_index_usage_stats
と、いくつかのクエリプランまたは別のものにあるようです。
これは私の質問です。[ix_IndexName7]
orをドロップするとしましょう[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])