ページネーションを実装するために、休止状態の API のquery.setMaxResults(maxResults)
&query.setFirstResult(firstResult)
メソッドを使用しています。MS SQLServer 2012 sp1
プロジェクトに使用しているDBです。
以下は、サンプル クエリです。
SELECT a.c1, b.c2, b.c3 FROM Person as a WITH(NOLOCK), Address as b WITH(NOLOCK) where <condition> ORDER BY a.c1
query.setMaxResults(maxResults)
&query.setFirstResult(firstResult)
メソッドはどのように機能しますか? DB からすべてのデータを取得し、result-set
最初のパラメーターと最大パラメーターに基づいてフィルター処理しますか? それとも、インデックス max-result
からの値に基づいて結果の数だけを取得しますか?first-result
ユーザーは、アプリケーションが UI をデータで更新するのに時間がかかっていると感じています。それでは、ページネーションを実装するための推奨される方法はどれですか? パフォーマンスを向上させるために、ストアド プロシージャまたはその他の手段を使用する必要がありますか? 親切にアドバイス。
更新: ユーザーがページ 1 を選択すると、次のクエリが実行されます。
SELECT top 200 a.c1, b.c2, b.c3 FROM Person as a WITH(NOLOCK), Address as b WITH(NOLOCK) where <condition> ORDER BY a.c1 - executed with 2502540 ms
ユーザーが 30 ページを選択すると、次のクエリが実行されます。
SELECT top 6000 a.c1, b.c2, b.c3 FROM Person as a WITH(NOLOCK), Address as b WITH(NOLOCK) where <condition> ORDER BY a.c1 - executed with 34220186 ms
したがって、時間がページ数に比例することは明らかです。ページ数に関係なく一定の実行速度を維持する方法はありますか? 常に同じ数のレコードを取得するためです。
前もって感謝します。