Właściwie nie mam teraz dostępności Oracle, ale najlepsze zapytanie SQL do stronicowania jest na pewno następujące
select *
from (
select rownum as rn, a.*
from (
select *
from my_table
order by ....a_unique_criteria...
) a
)
where rownum <= :size
and rn > (:page-1)*:size
http://www.oracle.com/technetwork/issue-archive/2006/06-sep/o56asktom-086197.html
Aby osiągnąć spójne stronicowanie powinieneś uporządkować wiersze, używając unikalnych kryteriów , dzięki temu unikniesz załadowania dla strony X wiersza, który już załadowałeś dla strony Y ( !=X ).
EDYCJA:
1) Porządkowanie wierszy przy użyciu unikalnych kryteriów oznacza uporządkowanie danych w taki sposób, aby każdy wiersz zachował tę samą pozycję przy każdym wykonaniu zapytania
2) Indeks zawierający wszystkie wyrażenia użyte w klauzuli ORDER BY pomoże szybciej uzyskać wyniki, szczególnie dla pierwszych stron. Z tym indeksem plan wykonania wybrany przez optymalizator nie musi sortować wierszy, ponieważ zwróci wiersze przewijające indeks w naturalnej kolejności.
3) Nawiasem mówiąc, najszybszym sposobem na strony wyników zapytania jest wykonanie zapytania tylko raz i obsłużenie całego przepływu ze strony aplikacji.