사용하지 않는 NONCLUSTERED INDEX로 여전히 쿼리 속도를 향상시킬 수 있습니까?


13

이것은 이상한 상황이지만 누군가가 답하기를 바랍니다.

성능 문제를 해결하는 동안의 요청에 따라 NONCLUSTERED INDEX를 테이블에 추가했습니다 sp_BlitzIndex. 다음날 사용법을 확인한 후 0 번 읽음 ( 0 스캔 / 수색, 0 싱글 톤 조회 )을 표시하여 비활성화했습니다.

바로 다음 순간에, 우리는 INDEX를 추가했을 때 처음으로 확인하고 해결하려고했던 것과 같은 앱 느림 (성능 문제)에 대한 불만을 얻습니다.

이론 상으로는 이것이 우연의 일치라고 들립니다. INDEX는 아마도 사용되지 않았을 것 입니다. 비활성화하면 쿼리 성능이 저하 되어서 는 안됩니다 (SHOULD NOT) . 그러나 대부분의 너무 우연의 일치.

질문

따라서 내 질문은 간단합니다.

그것은이다 가능한 모든에 그 사용량 통계 클러스터되지 않은 인덱스합니다 (DMV에에서가 / 있음, sp_BlitzIndex) NO 사용량을 표시하지, 여전히 한 도움이 영향을받는 테이블에 어떻게 든 쿼리 성능을?


추신 : 속담 "테스트 해봐!" 응답; 테이블이 많이 사용되고 야간 유지 관리 기간까지 인덱스가 다시 활성화 (재 구축)되지 않기 때문에 내일까지 테스트해야합니다. 그리고 성능 문제의 본질은 산발적이고 어쨌든 재현하기 어려웠습니다. 나는 "아니오, 나는 그것을 테스트하지 않겠다"고 말하는 것이 아니라, 우리가 테스트하고 계획해야한다는 것을 알고 있지만, 이론 및 / 또는 경험적 지식을 요구하고 있습니다.
NateJ

1
이 블로그 게시물이 유용 할 수 있습니다. brentozar.com/archive/2016/11/…
Rich Benner

답변:


13

예. SQL Server에서 해당 인덱스의 통계가 더 정확하고 유용하다고 판단하고 해당 통계를 사용하여 추정을 수행하고 계획을 세울 수 있습니다.

SQL Server가 한 인덱스의 통계를 사용하고 다른 인덱스를 스캔 / 탐색하기로 결정한 상황을 겪었습니다.

편집-색인을 비활성화했다는 것을 깨달았습니다. 그 시나리오를 테스트하지 않았습니다.


명확하고 간결한 답변에 감사드립니다! 예, 즉시 비활성화되지 않았으며 사용자 불만 / 성능 저하 전에 몇 초 동안 비활성화 할 때까지 활성화 및 완전히 "활성화되었습니다". 당신은 좋은 :)
NateJ

1
@NateJ 그 이론은 CREATE STATISTICS대신에 테스트 될 수있다 CREATE INDEX.
Jakub Kania
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.