2

ページネーションを実装するために、休止状態の 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

したがって、時間がページ数に比例することは明らかです。ページ数に関係なく一定の実行速度を維持する方法はありますか? 常に同じ数のレコードを取得するためです。

前もって感謝します。

4

1 に答える 1