2016-06-23 2 views
3

많은 인덱스가있는 데이터베이스 (SQL Server 2012)를 정리하고 있습니다. 일부는 삭제되거나 병합 될 수 있다고 생각합니다. index1의 훨씬 더 보다 사용하는 것이 내가 DB 통계에서 볼중복 된 유사한 인덱스

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

:

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

index2 :

예를 들어, 나는 INDEX1이 있습니다 index2 그러나 나는 모든 정보가 인 것으로 생각합니다.색인 2입니다. 그래서 만약 index1이라면, DB 엔진은 2 인 인덱스 대신에 index1을 찾는다. 성능은 지금만큼 좋아질 것입니다. (유지 보수해야 할 인덱스가 하나 더 적어지기 때문에 조금 더 좋음)

맞지 않니?

+0

'index1'의 include 칼럼을''index2'라고 가정하면 가정은 정확합니다. 'DBCC FREEPROCCACHE'를 사용하는 이전 인덱스를 사용하는 일부 프로 시저에 대해서는 계획 캐시를 삭제해야 할 수도 있습니다. –

+0

BrentOzar.com에서 sp_BlitzIndex를 찾아보십시오. 그러면 많은 중복 또는 거의 중복 된 항목이 강조 표시되며 누락 된 색인은 사용자에게 유용 할 수 있습니다. –

답변

3

"a_bunch_of_columns"가 동일하거나 두 번째 열이 첫 번째 열의 수퍼 세트라고 가정하면 올바른 것입니다.

첫 번째 인덱스의 유일한 이점은 메모리 공간이 덜 차지한다는 것입니다. 그러나 인덱스를 모두 제거하는 것보다 실제로 무시할 수있는 이점입니다.

+0

완전히 동의합니다. 두 가지 인덱스가 모두 사용되는 경우 (작은 경우조차도) 둘 다 메모리에 보관됩니다. –

관련 문제