4


假设我有一个 ActiveRecord 查询,它有 100 万条记录作为结果,我正在使用 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 回答