우리는 제한없이 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가 취한 접근법을 권장합니다.
더 좋은 방법이 있습니까?
이 문제에 대해 꽤 많은 시간과 비둘기 시간을 소비 했으므로 같은 결론을 얻었습니다. DB2에는 효율적인 페이징 메커니즘이 없습니다. – grenade