Ve skutečnosti teď nemám k dispozici Oracle, ale nejlepší SQL dotaz pro stránkování je určitě následující
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 bylo dosaženo konzistentního stránkování měli byste řádky seřadit podle jedinečných kritérií , vyhnete se tak načtení pro stránku X řádku, který jste již načetli pro stránku Y ( !=X).
EDIT:
1) Řazení řádků pomocí jedinečných kritérií znamená seřadit data tak, aby si každý řádek zachoval stejnou pozici při každém provedení dotazu
2) Rejstřík se všemi výrazy použitými v klauzuli ORDER BY pomůže získat výsledky rychleji, zvláště pro první stránky. S tímto indexem nemusí plán provádění zvolený optimalizátorem třídit řádky, protože vrátí řádky posouvající index podle jeho přirozeného pořadí.
3) Mimochodem, nejrychlejší způsob, jak vyvolat stránku výsledku z dotazu, je provést dotaz pouze jednou a zvládnout veškerý tok ze strany aplikace.