2012-04-10 3 views
2

간단히 말해서, MyView입니다.내부보기 선택보기 WHERE

내가 할 경우

SELECT * FROM MyView 

내가 MyView 뒤에 기본 쿼리가 뷰를 구축하기 위해 실행되는 것으로 알고 있습니다. I가 있다면

이제, 상기 WHERE이 적용되기 전에

SELECT * FROM MyView WHERE MyValue BETWEEN 2 AND 5 

내가 바로 전체 기본 쿼리는 여전히 실행해야한다고 생각하는 건가요?

저는 이것이 Execution Plan 창을 보는 것으로 생각합니다.하지만 제 예제가 너무 단순해서 실제적인 차이점을 볼 수 없다고 생각합니다.

WHERE의 조건과보기를 구성하는 조인 조건에 따라보기가 복잡해 지므로보기를 사용하지 않고 쿼리를 작성하는 것이 더 효과적일까요?

+0

'MyValue'는 계산 된 표현식 또는 기본 테이블의 열입니까? –

+0

필자는 기본 테이블의 열을 추측하여 일반적인 용어로 설명합니다. 중요한 차이가 있습니까? – Gavin

답변

5

No. A where 뷰에 외부 적으로 적용된 절이 마치 뷰의 필수 부분 인 것처럼 뷰에 "삽입"됩니다. 가져온 뷰의 모든 레코드를 가져올 지 여부는 쿼리하는 열의 특성에 따라 다르지만 결과는 기본적으로 뷰 본문과 where 절로 구성된 임시 쿼리를 실행하는 경우와 같습니다. 예컨대

이보기 :

create view that_view as select * from Orders 

select * from that_view where order_number = 1 

가 인덱스 실행하는 반면, 모든 레코드를 반환 Orders 테이블에서 검색하여 실행한다 order_number에 시크 (단, 당신은 인덱스를 가짐), 전체 테이블을 만들지 않고 한 행만 리턴한다.

Some gotchas exist though.

+1

@Gavin 예를 들어, 열이 집계 함수 인 경우, 'where_column = x'은 모든 관련 레코드 (최상의 경우) 또는 모든 레코드 (최악의 경우)를 가져와 집계를 계산하게됩니다. 하위 쿼리에서 오는 열과 동일합니다. 즉, 모든 하위 쿼리 레코드를 가져 오거나 (예 : 특정 창 함수 인 경우) 테이블에서 곧게 나오는 "일반"열만큼 성능이 좋을 수 있습니다. 하지만 제가 말씀 드렸듯이, 항상 최상의 결과를 얻으 려합니다 (SQL Server 버그는 제쳐두고 있습니다). 보기를 사용하지 않아도 성능이 향상되지는 않습니다. – GSerg