Jag har faktiskt inte tillgång till Oracle nu men den bästa SQL-frågan för personsökning är säkert följande
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
För att uppnå en konsekvent personsökning du bör ordna rader med ett unikt kriterium , om du gör det undviker du att ladda för sida X en rad som du redan har laddat för en sida Y ( !=X ).
EDIT:
1) Beställa rader med ett unikt kriterium innebär att beställa data på ett sätt så att varje rad kommer att behålla samma position vid varje körning av frågan
2) Ett index med alla uttryck som används i ORDER BY-satsen hjälper dig att få resultat snabbare, speciellt för de första sidorna. Med det indexet behöver exekveringsplanen som valts av optimeraren inte sortera raderna eftersom den kommer att returnera rader som rullar indexet i naturlig ordning.
3) Förresten, det snabbaste sättet att hitta resultat från en fråga är att köra frågan endast en gång och att hantera allt flöde från applikationssidan.