Je n'ai pas réellement la disponibilité d'Oracle maintenant mais la meilleure requête SQL pour la pagination est certainement la suivante
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
Pour obtenir une pagination cohérente vous devez ordonner les lignes en utilisant un critère unique , cela évitera de charger pour la page X une ligne que vous avez déjà chargée pour une page Y ( !=X ).
MODIFIER :
1) Ordonner les lignes à l'aide d'un critère unique signifie ordonner les données de manière à ce que chaque ligne conserve la même position à chaque exécution de la requête
2) Un index avec toutes les expressions utilisées sur la clause ORDER BY aidera à obtenir des résultats plus rapidement, en particulier pour les premières pages. Avec cet index, le plan d'exécution choisi par l'optimiseur n'a pas besoin de trier les lignes car il renverra des lignes faisant défiler l'index selon son ordre naturel.
3) Soit dit en passant, le moyen le plus rapide d'afficher le résultat d'une requête consiste à exécuter la requête une seule fois et à gérer tout le flux du côté de l'application.