2016-06-23 4 views
3

インデックスがたくさんあるデータベース(SQL Server 2012)をクリーンアップしています。私が信じているものは、削除されたりマージされたりする可能性があります。冗長な類似インデックス

例えば、私は index1のがあります:

INDEX2
CREATE NONCLUSTERED INDEX [index1] ON [dbo].[MyTable] 
(
    [Project] ASC 
) 
INCLUDE (a_bunch_of _columns) 

CREATE NONCLUSTERED INDEX [index2] ON [dbo].[MyTable] 
(
    [Project] ASC, 
    [Type] ASC 
) 
INCLUDE (a_bunch_of _columns) 

私は INDEX1がよりもはるかに多く使用されていることをDB統計で見ますindex2しかし、私はすべての情報がindex1は、index2にあります。したがって、のインデックス1が削除された場合、DBエンジンはインデックス2の代わりにインデックス1の代わりに検索します。パフォーマンスは今のところ良くなります。 (維持するために1つ少ないインデックスがあるので少しでも良い)

これは間違っていると思いますか?

+0

'index1'のインクルード列が' index2'にあると仮定すると、あなたの前提は正しいです。 'DBCC FREEPROCCACHE'を使用して古い索引を使用するプロシージャのいくつかについては、プラン・キャッシュをクリアする必要があります。 –

+0

BrentOzar.comにアクセスして、それらのsp_BlitzIndexを見てください。重複しているか重複している部分が強調表示され、欠落しているインデックスが表示されます。 –

答えて

3

"a_bunch_of_columns"が同じである(または2番目の列の列が最初のスーパーセットである)と仮定すると、正しいです。

最初のインデックスの唯一の利点は、メモリの占有スペースが少なくて済むことです。しかし、これはインデックスを完全に削除するのに比べて、実際には無視できる利点です。

+0

完全に合意しなければならないことは、両方のインデックスが使用されている場合(少しでも)、どちらも両方ともメモリに保持されることです。 –