누락 된 인덱스를 맹목적으로 추가해도 괜찮습니까?


21

종종 SSMS를 사용하여 누락 된 인덱스에 대한 느린 저장 프로 시저를 테스트합니다. "Missing Index (Impact xxx)"가 표시 될 때마다, 저의 반응은 새로운 인덱스를 만드는 것입니다. 내가 말할 수있는 한 매번 더 빠른 쿼리가 발생합니다.

내가 계속하지 말아야 할 이유가 있습니까?


1
이 누락 된 색인 기능을 얻을 수있는 곳을 알려주십시오.
Ali Raza Iftikhar 2016 년

답변:


27

많은 이유.

내가 생각할 수있는 가장 큰 것 중 하나는 누락 된 인덱스 DMV가 기존 인덱스를 고려하지 않는다는 것입니다.

예:

가있는 테이블이 ColA, ColB, ColC있습니다.

현재에 대한 색인이 있습니다 ColA. 누락 된 색인 DMV는에 색인을 추가 할 것을 제안합니다 (ColA, ColB). 이것은 정확할 수도 있지만 현명한 일은 ColB기존 색인에 두 번째 키로 추가 하는 것입니다. 그렇지 않으면 중복 적용 범위가 있고 공간과 오버 헤드가 낭비됩니다.

마찬가지로에 대한 색인이 있으면에 대한 색인을 ColB INCLUDE (ColA)제안 할 수 있습니다 ColB INCLUDE (ColC). 현명한 일은 ColC기존 인덱스의 포함 목록에 추가 하는 것입니다.

제안 된 인덱스는보기가 매우 좁습니다. 단일 쿼리 또는 단일 쿼리 내의 단일 작업 만 봅니다. 그들은 이미 존재하는 내용이나 다른 쿼리 패턴을 고려하지 않습니다.

전반적인 인덱싱 전략을 분석하고 인덱스 구조가 효율적이고 응집력이 있는지 확인하려면 여전히 생각하는 사람이 필요합니다.

제안 된 모든 색인을 추가하는 데 문제가 없다면 제안 할 필요조차 없습니다. 자동으로 구현됩니다.


아마 그것이 내가 bazillion 지수를 가지고있는 것처럼 느끼는 이유 일 것입니다. 나는이 설명 계획을 더 잘 이해하고 색인을 수동으로 파악해야한다고 생각합니다.
OO

당신이 구글 duplicate index scripts이나 이와 비슷한 것을 추적 할 수있는 많은 자료가 있습니다. 나는 내 자신의 인덱스를 대부분 관리하고 그것에 대해 약간의 지식을 가지고 있지만 여전히 속기를 찾습니다.
JNK

"여전히 전반적인 인덱싱 전략을 분석하고 인덱스 구조가 효율적이고 응집력이 있는지 확인해야하는 사고가 필요합니다." +1! 컨설턴트로서 저는 모든 종류의 상황에서 모든 종류의 고객을 확보했습니다. 때로는 데이터베이스 엔진 튜닝 관리자가 제안한 너무 많은 인덱스 (및 잘못된 인덱스, 중복 인덱스 등)가 있기 때문에 클라이언트를 얻습니다.
Mike Walsh

@JNK-그렇게하겠습니다.
OO

2
요점-겹치는 인덱스는 여기에서 가장 조심해야 할 것입니다. 물론 색인이 많을수록 삽입 속도가 느려지고 유지 관리 성 (복잡성 추가) 등이 발생합니다.
Jeff Atwood

8

쿼리와 DB 스키마가 급격히 복잡 해짐에 따라 쿼리 계획에서 누락 된 인덱스 제안이 지속적으로 신뢰도가 떨어지는 것을 발견했기 때문에이 튜닝 기술을 신중하게 사용하는 것이 좋습니다. 이것은 내 경험의 여러 가지 이유 때문입니다.

1) "백분율 향상"은 가장 단순한 쿼리 / 가장 명백한 인덱스를 제외한 모든 쿼리에 적용 할 수 있습니다. 결과는 단지 추정치 일 뿐이며 쿼리 실행시 발생한 실제 비용 또는 실제 행 수에서 파생되지 않습니다. 제안 된 인덱스를 구현 한 후 쿼리 비용이 증가했거나 사용되지 않고 계획이 동일하게 유지되었습니다.

2) 쿼리 구성으로 인해 (조인 및 where 절이 최적화되지 않은 등으로 인해) 쿼리 계획 자체가 최적이 아니거나 날짜 누락 / 날짜 통계로 인해 행 개수 추정이 해제됩니다. 무자비한 쿼리 계획에 대한 인덱싱은 종종 성능이 점진적으로 향상되는 반창고 솔루션입니다.

3) 전체 그림이 보이지 않을 수 있습니다. 그래픽 계획 만 사용하고 XML을 보지 않고 둘 이상의 누락 된 인덱스가 제안되었는지 확인하는 경우에 특히 그렇습니다. 그래픽 계획에서 첫 번째로 표시된 것이 반드시 쿼리에 가장 큰 영향을주는 것은 아닙니다.

4) 기존 색인을 수정할 때 제안되는 새로운 색인의 많은 예를 보았습니다. 이 요점에 관한 다른 답변을 보아라. 제발 더 나설 필요가 없다.

익숙하지 않은 쿼리 / 환경으로 작업 할 때 누락 된 인덱스 제안 만 시작점으로 사용하여 더 깊게 볼 위치를 확인하십시오. 계획의 연산자 (주로 검색 / 스캔 / 조인)를보고 툴팁 또는 속성 창을 확인하여 관련 열을 확인하고 색인 후보를 결정하여 개선을 테스트하기 위해 사용합니다.


2

주로 인덱스 작동 및 저장 방법을 알고있는 데는 여러 가지 이유가 있습니다. SSMS 제안에 따라 항상 인덱스를 더 좋게 만들거나 최소한 더 나쁘게 만들지 않을 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.