2010-08-18 3 views
2

에서 전체 SQL을 쓰는 것보다 내가 3 개 테이블 (A, B, C)가 뷰를 사용하고 난 그냥 생각하고은 빠르거나 느린 단지 처음

A inner join B 
union 
A inner join C 

의 결과를 조회 할 수 매우 자주 필요 어떤 방법이 더 빨리 될 것입니다 :

  • 처음

    에서 각 쿼리에
  • 을 전체를 작성하는 뷰를 생성하고 쿼리

  • 에서 사용하기

답변

1

뷰에 집계가 없으면 뷰를 사용하는 것이 원시 SQL을 사용하는 것과 완전히 동일합니다. 집계가 없다는 것은 where 절이 옵티마이 저가 통계에 기초하여 최적이라고 간주하는 뷰에 '내부적으로'적용될 수 있음을 의미합니다. (이것은 뷰 내에서 where 절을 '푸시 (push)'라고 종종 부른다고 생각합니다.)

2

일반적으로보기는 SQL의 저장된 버전이 아니며이 경우에는 아니오입니다. 그러나 인덱싱 된 뷰를 사용하면 특히 집계와 관련하여 이점을 얻을 수 있습니다. 인덱스 된 제한된 뷰에는 1 개의 제한이 있습니다. union은 허용되지 않습니다.

+1

엔터프라이즈를 실행하지 않는 경우 판을 사용하려면 이점을 얻기 위해 인덱스 된 뷰와 함께 NOEXPAND 힌트를 사용해야합니다. –