2

以下は、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])
4

2 に答える 2

2

一部のインデックスを削除してクエリを再度実行すると、新しい実行プランが再コンパイルされます。残りのインデックスの一部が使用されるか、使用されない可能性があります。テストの問題であり、どのアクションが最も役立つか、逆にすべてのパフォーマンスを台無しにするかを確認します。

これらのスクリプトは、インデックスについて話すときに決定を下すのに便利です。

それらはすべて、インデックス、重複、未使用、統計、待機状態、I/O 使用などの現在のステータスに関する多くの情報を提供します。その情報に基づいて、より正確な分析を行い、最適なオプションを選択できます。

于 2013-05-03T21:16:32.173 に答える
0

ソースに特定の種類の変更が発生すると、クエリ プランは無効になります。これには、使用しているすべてのインデックスの削除が含まれます。無効なクエリ プランは使用されません。

一致する有効なクエリ プランがキャッシュ内に見つからない場合、保留中のクエリは新しいものを作成するだけです...

于 2013-05-03T21:12:33.967 に答える