4


結果として 100 万件のレコードを持つ ActiveRecord クエリがあり、WillPaginate を使用して (もちろん) この結果を改ページするとします。
したがって、私の疑問は次のとおりです。
これらの 100 万件のレコードはすべて何らかの形でメモリに格納されているのでしょうか、それとも will_paginate クエリを再度実行してさらに多くのレコードを取得するのでしょうか?

私は明確であることを願っています:)

4

2 に答える 2

3

いいえ、100 万件すべてのレコードを繰り返し取得するわけではありません。クエリは次のようになります。

SELECT ... FROM ... LIMIT X OFFSET Y

...ここXで、 はページあたりの最大値でありY、 はスタックの一番上からスキップするレコードの数であり、 によって決定されX * (current_page - 1)ます。

于 2013-02-20T14:00:28.443 に答える
1

Will_paginate は個別のクエリを実行してデータを入力し、一度にすべてのデータを取得するわけではありません。ターミナルでもページネーションがどのように機能するかを確認できます。RailsのデフォルトのWebrickサーバーを使用しているとしましょう。次に、端末に will_paginate によって作成された SQL クエリが次のように表示されます。

Processing by InvoicesController#index as HTML


Invoice Load (0.1ms)  SELECT "invoices".* FROM "invoices" ORDER BY id DESC LIMIT 5 OFFSET 0
于 2013-02-20T14:50:56.093 に答える