3

典型的な Rails pagination gem の問題は、2 つのクエリを実行することです。1 つは現在のページ用で、もう 1 つは合計数用です。ページ数を気にしない場合 (エンドレス スクロールなど)、2 番目のクエリは不要です (1 番目のクエリの LIMIT 句に 1 を追加するだけで、それ以上あるかどうかがわかります)。

2番目のクエリなしでページネーションを行うgemはありますか? 2 番目のクエリは、大きなデータセットの WHERE 句でインデックスなしのフィルターを適用するとコストがかかり、挿入を高速にする必要があるため、さまざまなフィルターすべてにインデックスを付けることが受け入れられません。

ありがとう!

4

2 に答える 2

1

理解した。will_paginate gem を使用する場合、独自の total_entries オプションを AR:Base.paginate に指定できます。これにより、2 番目のクエリが実行されなくなります。

これは、最近のエントリのみを気にする十分に大きなデータセットに対して機能します。

リストのサイズが per_page で割り切れる場合、最後のクエリで空のセットをクエリすることになるため、実際にリストの最後にヒットすることが予想される場合、これは必ずしも受け入れられるとは限りません。エンドレススクロールならこれでいい。手動の「さらに読み込む」ボタンを使用すると、読み込む項目がなくなったときに最後に「さらに読み込む」が表示されます。

于 2011-08-13T06:10:12.837 に答える
0

あなたが特定したように、標準的なアプローチは、N が必要なときに N+1 レコードをフェッチすることです。応答で N を超えるレコードを取得した場合、表示できる結果の追加ページが少なくとも 1 ページあります。

明示的なCOUNT(*)呼び出しを行う唯一の理由は、取得する必要があるレコードがさらにいくつあるかを具体的に知る必要がある場合です。一部のエンジンでは、計算にかなりの時間がかかることがあるため、特に値が直接使用されない場合は避けるのが最善です。

これはとても簡単なので、プラグインは必要ありません。のようなプラグインwill_paginateは、利用可能なページ数に関心があるため、カウント操作を行います。

于 2011-08-12T21:31:04.113 に答える