우선, WHERE 절을 사용하여보기가 제한되면, 좋은 색인을 사용할 수 없기 때문에 성능상의 불이익을 당할 가능성이 있습니다 보기의 자체 색인과 충돌하는 경우 열 10 개에 뷰는 단지 열을 제한하지만 WHERE 절을이없는 경우
, 그것은 불확실하다 - 자세한 내용은 아래를 참조하십시오, 나는보기가 반드시되지 않기 때문에 당신이 벌을 겪게됩니다 것을 추론하고있어 this article을 바탕으로
을 열 10 개를 사용하여 컴파일하고 잘못된 쿼리 계획을 상속받을 수 있습니다.
그것은 테스트에 매우 쉽습니다 :
쿼리
select * from myView where someNonIndexedColumn = someValue
를 실행 (where 절에서 열이 원래의 테이블에 인덱스의에 NOT 있는지 확인).
위에서 쿼리 계획을 실행하고 테이블 스캔을 수행하는지 확인하십시오.
이제 원본 테이블의 색인에있는 두 개의 열을 선택하십시오. 예 : 그것들에 대한 쿼리가 커버 인덱스를 사용해야하는지 확인하십시오. 인덱스 I1에 C1과 C2라고 말하십시오.
실행
select C1, C2 from myTable where C1=x and C2=Y
에서 쿼리 계획에 하고 커버링 인덱스로 "I1"인덱스를 사용해야합니다.
에 쿼리 계획과 실행
select C1, C2 from myView where C1=x and C2=Y
하고 커버링 인덱스로 테이블 스캔 또는 I1을 할 것입니다 있는지 확인합니다.
내 의심 당신이 "extr 190 열 성능에 대한 나쁜 것입니다"입니다 대답이 경우 테이블 스캔을 할 것입니다 - 기본적으로, 라이언 Fonnett의 링크 된 문서의 네거티브 모든보기에 적용 .
# 5에서 커버 인덱스를 사용하는 경우 190 열이 있다는 사실은 부적합합니다.
출처
2009-10-05 13:10:32
DVK
당신이 말하는 * procs *가 저장 프로 시저이거나 클라이언트 측 프로그램인지 확실하지 않습니다. –
그들은 asp.net 응용 프로그램에서 호출하는 서버에 저장 프로 시저입니다. – GernBlandston
보기를 사용하거나 사용하지 않고 프로필을 작성해야하지만 그다지 걱정하지 않아도됩니다. 기본적으로 SQL Server는 저장 프로 시저에서 뷰를 호출 할 때 뷰를 확장합니다. 나는 옵티마이 저가 실제로 어떤 컬럼이 필요한지 파악할만큼 똑똑하다고 확신한다. –