假设我有一个ActiveRecord查询,结果有100万条记录,我正在使用WillPaginate(当然)对此结果进行分页。
所以,我怀疑是:
所有这100万条记录都存储在内存中,或者再次执行will_paginate查询以检索越来越多的记录?
我希望我很清楚:)
答案 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