will_paginate查询是否多次执行?

时间:2013-02-20 13:47:10

标签: ruby-on-rails will-paginate rails-activerecord


假设我有一个ActiveRecord查询,结果有100万条记录,我正在使用WillPaginate(当然)对此结果进行分页。
所以,我怀疑是:
所有这100万条记录都存储在内存中,或者再次执行will_paginate查询以检索越来越多的记录?

我希望我很清楚:)

2 个答案:

答案 0 :(得分:2)

不,它不会反复抓取所有100万条记录。查询看起来像这样:

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

...其中X是每页的最大值,Y是从堆栈顶部跳过的记录数,由X * (current_page - 1)确定。

答案 1 :(得分: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