내가 사용하고 SQL 서버 2008 R2 및 쿼리최적화 행 수 쿼리
select * from
(
select d.ID as ID,
....
....
ROW_NUMBER() OVER
(
ORDER BY #some field
) AS RowNum
from
/*some table*/
LEFT join
(select Device_ID,
Level,
ROW_NUMBER() over (partition by Device_ID order by id desc) as rn
from #sometable as de WITH (NOLOCK)
where #some condition
) t
where t.rn = 1)tmp on ID=tmp.Device_ID **/* sort operation 1*/**
/*some more joins */
WHERE /*some condition*/
) as DbD
where RowNum BETWEEN @SkipRowsLocal and (@SkipRowsLocal + @TakeRowsLocal - 1)
order by RowNum
에서 쿼리의 페이지 매김 종류를 구현하기 위해 노력하고 아래했지만, 그것은 매우 느리게 실행 것처럼 보인다 질의 계획을 살펴보면 정렬 작업이 쿼리 시간의 거의 50 %를 소비하고 있으며 기본적으로 임시 테이블에서 1로 표시된 첫 번째 정렬 연산을 추측합니다. 최신 값을 검색하고 바깥 행 번호에서 가져 오려고했습니다. 40 레코드 만 말해.
기본적으로 10K 행을 정렬하고 40 개를 가져 오는 것과 비슷하지만이 쿼리를 개선 할 수있는 방법이 있습니까?
실행 계획 및 테이블 정의 –
색인 DeviceId가 있습니까? 'ORDER BY # some field'이상의 색인 - 일부 필드가 무엇이든간에? – Cato
'where t.rn = 1'을'outer apply (row_number없이 두 번째 것)로 선택하십시오. –