5

10万件以上のレコードでクエリを実行する時間の観点から、次のうちどれがパフォーマンスが優れているかを知りたい

1)Oracleのページ付け

SELECT *
FROM  (
   SELECT id, col1, col2, rownum rn
   FROM (
      SELECT /*+ first_rows(50) */ id, col1, col2
      FROM   table1
      ORDER  BY id DESC
   )
   WHERE   rownum <= 50
)
WHERE  rn >= 20;

2)MyBatisRowBoundsを使用したページネーション。

MyBatis RowBoundsは通常のJDBCを使用し、selectを起動した後、最初の20レコードをスキップし、次の30(ページサイズ)をフェッチします。

また、スキップする必要のある行が増えるにつれてページ数が増えると、MyBatisのアプローチは遅くなりますか?

4

1 に答える 1

2

一般に、JDBCドライバーは、ネットワーク全体で最初の20行をフェッチする必要があるため、一般に、ページネーションクエリを作成するよりも効率が低くなります。より多くのページをフェッチすると、そのペナルティは大きくなります。

一般に、どちらのアプローチも、後続のページをフェッチするにつれて遅くなります。ただし、これは通常は問題ではありません。結果をページングしている場合、ユーザーが諦める前に実際に2ページを超える結果を取得することはないことを意味します。

于 2012-07-12T01:58:50.067 に答える