Saya sebenarnya tidak memiliki ketersediaan Oracle sekarang tetapi kueri SQL terbaik untuk paging adalah yang berikut ini dengan pasti
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
Untuk mencapai halaman yang konsisten Anda harus mengurutkan baris menggunakan kriteria unik , melakukannya akan menghindari memuat halaman X baris yang sudah Anda muat untuk halaman Y ( !=X ).
EDIT:
1) Memesan baris menggunakan kriteria unik berarti mengurutkan data sedemikian rupa sehingga setiap baris akan mempertahankan posisi yang sama pada setiap eksekusi kueri
2) Indeks dengan semua ekspresi yang digunakan pada klausa ORDER BY akan membantu mendapatkan hasil lebih cepat, terutama untuk halaman pertama. Dengan indeks tersebut, rencana eksekusi yang dipilih oleh pengoptimal tidak perlu mengurutkan baris karena akan mengembalikan baris yang menggulir indeks menurut urutan aslinya.
3) Omong-omong, cara tercepat ke hasil halaman dari kueri adalah dengan menjalankan kueri hanya sekali dan menangani semua aliran dari sisi aplikasi.