2010-03-21 3 views
0

우리는 제한없이 9 천만 개의 행을 반환하고 해당 뷰의 페이지 된 데이터 집합을 표시해야하는보고 응용 프로그램을 제공합니다.DB2의 페이징 엄청난 테이블

select * from (select rownumber() over() as rownum, 
    this_.COL1 as COL1_20_0_, 
    this_.COL2 as COL2_20_0_ 
    FROM SomeSchema.SomeView this_ 
    WHERE this_.COL1 = 'SomeValue') as tempresult 
where rownum between 10 and 20 

쿼리는 무릎 DB 서버를 제공합니다 : 우리는 최근 NHibernate에를 사용하고

는 페이징 메커니즘은 다음과 같습니다 것으로 나타났습니다. 나는 일어나고있는 일은 중첩 된 쿼리가 부분 집합 (행 10-20)을 선택하기 전에 where 절이 만족하는 모든 행에 행 번호를 할당하는 것입니다. 중첩 된 쿼리는 많은 행을 반환하므로 메커니즘은 그리 효율적이지 않습니다. 다른 SQL 플랫폼에서이 작업을 효율적으로 수행하기위한 팁과 트릭을 많이 보았지만 DB2 솔루션을 찾기 위해 고심하고 있습니다. 사실 an article on IBM's own site은 nhibernate가 취한 접근법을 권장합니다.

더 좋은 방법이 있습니까?

답변

1

불행히도 내가 아는 바로는 유일한 접근 방법입니다. 그러나 먼저 시각 구성 요소 또는 스냅 샷/이벤트 모니터링 도구를 사용하여 쿼리 구성 요소에 소비 된 시간을 확인해야한다고 생각합니다.

+0

이 문제에 대해 꽤 많은 시간과 비둘기 시간을 소비 했으므로 같은 결론을 얻었습니다. DB2에는 효율적인 페이징 메커니즘이 없습니다. – grenade