現在、実際にOracleを利用できるわけではありませんが、ページングに最適なSQLクエリは確かに次のとおりです
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
一貫したページングを実現するため 一意の基準を使用して行を並べ替える必要があります 、そうすることで、ページXに対して、ページYに対して既にロードした行(!=X)をロードすることを回避できます。
編集:
1)一意の基準を使用して行を並べ替えるということは、クエリを実行するたびに各行が同じ位置を維持するようにデータを並べ替えることを意味します
2)ORDER BY句で使用されるすべての式を含むインデックスは、特に最初のページで結果をより速く取得するのに役立ちます。そのインデックスを使用すると、オプティマイザによって選択された実行プランは、自然な順序でインデックスをスクロールする行を返すため、行を並べ替える必要はありません。
3)ちなみに、クエリの結果をページングする最も速い方法は、クエリを1回だけ実行し、アプリケーション側からのすべてのフローを処理することです。