結果として 100 万件のレコードを持つ ActiveRecord クエリがあり、WillPaginate を使用して (もちろん) この結果を改ページするとします。
したがって、私の疑問は次のとおりです。
これらの 100 万件のレコードはすべて何らかの形でメモリに格納されているのでしょうか、それとも will_paginate クエリを再度実行してさらに多くのレコードを取得するのでしょうか?
私は明確であることを願っています:)
結果として 100 万件のレコードを持つ ActiveRecord クエリがあり、WillPaginate を使用して (もちろん) この結果を改ページするとします。
したがって、私の疑問は次のとおりです。
これらの 100 万件のレコードはすべて何らかの形でメモリに格納されているのでしょうか、それとも will_paginate クエリを再度実行してさらに多くのレコードを取得するのでしょうか?
私は明確であることを願っています:)
いいえ、100 万件すべてのレコードを繰り返し取得するわけではありません。クエリは次のようになります。
SELECT ... FROM ... LIMIT X OFFSET Y
...ここX
で、 はページあたりの最大値でありY
、 はスタックの一番上からスキップするレコードの数であり、 によって決定されX * (current_page - 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