2013-07-08 5 views
0

보기가 실행되는 데 20 초가 걸립니다.이보기에서는 자체 쿼리와 동일한 SQL 실행이 1 초 미만입니다. 누구나이 이유에 대해 알고 있거나 내가보기 속도를 높이기 위해 할 수있는 일을 알고 있습니까?보기가 쿼리보다 오래 걸립니다.

약 7 개의 LEFT JOINS와 몇 개의 "그룹당 가장 큰 n"중첩 쿼리가있는 매우 직관적 인보기입니다. 예를 들어

select t.id, t.rev, t.contents 
from MyTable t 
inner join(
    select id, max(rev) rev 
    from MyTable 
    group by id 
) in on t.id = in.id and t.rev = in.rev 

답변

4

당신은 집계를 대체하여 모두 속도 및 윈도우 기능에 가입 할 수 있습니다 :

select t.id, t.rev, t.contents 
from (select t.id, t.rev, t.contents, MAX(rev) over (partition by id) as maxrev 
     from MyTable t 
    ) t 
where t.rev = t.maxrev; 

뷰와 쿼리 사이의 성능 차이에 대한 이유는 아마도 컴파일 때문이다. 뷰는 처음 실행될 때 컴파일되고 최적화됩니다. 그 이후로 데이터가 변경되었거나 사용중인 방식이 변경되었을 수 있습니다. 더 나은 실행 계획을 위해 데이터가 변경된 경우보기를 다시 컴파일 할 수 있습니다.

관련 문제