답변:
많은 이유.
내가 생각할 수있는 가장 큰 것 중 하나는 누락 된 인덱스 DMV가 기존 인덱스를 고려하지 않는다는 것입니다.
예:
가있는 테이블이 ColA, ColB, ColC
있습니다.
현재에 대한 색인이 있습니다 ColA
. 누락 된 색인 DMV는에 색인을 추가 할 것을 제안합니다 (ColA, ColB)
. 이것은 정확할 수도 있지만 현명한 일은 ColB
기존 색인에 두 번째 키로 추가 하는 것입니다. 그렇지 않으면 중복 적용 범위가 있고 공간과 오버 헤드가 낭비됩니다.
마찬가지로에 대한 색인이 있으면에 대한 색인을 ColB INCLUDE (ColA)
제안 할 수 있습니다 ColB INCLUDE (ColC)
. 현명한 일은 ColC
기존 인덱스의 포함 목록에 추가 하는 것입니다.
제안 된 인덱스는보기가 매우 좁습니다. 단일 쿼리 또는 단일 쿼리 내의 단일 작업 만 봅니다. 그들은 이미 존재하는 내용이나 다른 쿼리 패턴을 고려하지 않습니다.
전반적인 인덱싱 전략을 분석하고 인덱스 구조가 효율적이고 응집력이 있는지 확인하려면 여전히 생각하는 사람이 필요합니다.
제안 된 모든 색인을 추가하는 데 문제가 없다면 제안 할 필요조차 없습니다. 자동으로 구현됩니다.
duplicate index scripts
이나 이와 비슷한 것을 추적 할 수있는 많은 자료가 있습니다. 나는 내 자신의 인덱스를 대부분 관리하고 그것에 대해 약간의 지식을 가지고 있지만 여전히 속기를 찾습니다.
쿼리와 DB 스키마가 급격히 복잡 해짐에 따라 쿼리 계획에서 누락 된 인덱스 제안이 지속적으로 신뢰도가 떨어지는 것을 발견했기 때문에이 튜닝 기술을 신중하게 사용하는 것이 좋습니다. 이것은 내 경험의 여러 가지 이유 때문입니다.
1) "백분율 향상"은 가장 단순한 쿼리 / 가장 명백한 인덱스를 제외한 모든 쿼리에 적용 할 수 있습니다. 결과는 단지 추정치 일 뿐이며 쿼리 실행시 발생한 실제 비용 또는 실제 행 수에서 파생되지 않습니다. 제안 된 인덱스를 구현 한 후 쿼리 비용이 증가했거나 사용되지 않고 계획이 동일하게 유지되었습니다.
2) 쿼리 구성으로 인해 (조인 및 where 절이 최적화되지 않은 등으로 인해) 쿼리 계획 자체가 최적이 아니거나 날짜 누락 / 날짜 통계로 인해 행 개수 추정이 해제됩니다. 무자비한 쿼리 계획에 대한 인덱싱은 종종 성능이 점진적으로 향상되는 반창고 솔루션입니다.
3) 전체 그림이 보이지 않을 수 있습니다. 그래픽 계획 만 사용하고 XML을 보지 않고 둘 이상의 누락 된 인덱스가 제안되었는지 확인하는 경우에 특히 그렇습니다. 그래픽 계획에서 첫 번째로 표시된 것이 반드시 쿼리에 가장 큰 영향을주는 것은 아닙니다.
4) 기존 색인을 수정할 때 제안되는 새로운 색인의 많은 예를 보았습니다. 이 요점에 관한 다른 답변을 보아라. 제발 더 나설 필요가 없다.
익숙하지 않은 쿼리 / 환경으로 작업 할 때 누락 된 인덱스 제안 만 시작점으로 사용하여 더 깊게 볼 위치를 확인하십시오. 계획의 연산자 (주로 검색 / 스캔 / 조인)를보고 툴팁 또는 속성 창을 확인하여 관련 열을 확인하고 색인 후보를 결정하여 개선을 테스트하기 위해 사용합니다.