In realtà non ho disponibilità di Oracle ora, ma la migliore query SQL per il paging è sicuramente la seguente
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
Per ottenere un paging coerente dovresti ordinare le righe utilizzando criteri univoci , così facendo eviterai di caricare per la pagina X una riga che hai già caricato per una pagina Y ( !=X ).
MODIFICA:
1) Ordinare le righe utilizzando un criterio univoco significa ordinare i dati in modo che ogni riga mantenga la stessa posizione ad ogni esecuzione della query
2) Un indice con tutte le espressioni usate nella clausola ORDER BY aiuterà a ottenere risultati più velocemente, soprattutto per le prime pagine. Con quell'indice il piano di esecuzione scelto dall'ottimizzatore non ha bisogno di ordinare le righe perché restituirà le righe scorrendo l'indice secondo il suo ordine naturale.
3) A proposito, il modo più veloce per impaginare il risultato di una query è eseguire la query solo una volta e gestire tutto il flusso dal lato dell'applicazione.