Web サイトでページングを行う必要がある場合... どちらの方法がより効果的ですか?
分析関数 - ROW_NUMBER()
- オラクル10G
http://www.oracle.com/technetwork/issue-archive/2007/07-jan/o17asktom-093877.html
SELECT columnA, columnB FROM (SELECT columnA, columnB, row_number() over (order by columnB) rn FROM table) WHERE rn BETWEEN LOW_LIMIT AND OFFSET;
ROWNUM
- http://www.oracle.com/technetwork/issue-archive/2007/07-jan/o56asktom-086197.html
INMHO このアプローチは、より人間が読めるコードだと思います
SELECT * FROM ( SELECT rownum rn, a.* FROM( SELECT columnA, columnB FROM table ORDER BY columnB ) a WHERE rn <= OFFSET ) WHERE rnum >= LOW_LIMIT
注: RANK および DENSE_RANK 分析関数があることは理解していますが、決定論的クエリをページングするだけでよいと仮定しましょう。
注2:別の単純なクエリカウントを使用して考えているレコードの合計量を取得するには(*)