模型上的Rails .page调用也调用count

试着做一个简单的Model.all.page(1)
但是每当调用.page时,它都会创建一个SQL COUNT调用。 (我的实际代码比上面的代码更复杂,但为了便于阅读而简化了。)有没有办法阻止.page调用SQL计数? 我正在处理数以百万计的产品,这个调用正在使页面刷新需要额外的2秒钟来加载。 我已经有自己的自定义计数,这是即时的所以我不需要这个.page计数。

编辑:默认不使用.all。 不好的例子抱歉。

下面是一个非常简单的例子,简单来说就是我的代码: Product.limit(1).page(1)

用我的真实代码SQL产生: (1495.3ms) SELECT COUNT(*) FROM 'products' LEFT OUTER JOIN...

我加入了产品表,我不需要计算,因此事实上我有自己的计数方法,我想使用它并且不需要.page来生成它自己的计数。

当您调用Model.all.page(1)您将返回一个数组而不是ActiveRecord关系。

尝试只调用Model.page(1) ,你应该得到你想要的……如果你想要的是:

 Model.page(1) # results in SELECT "models".* FROM "models" LIMIT 30 OFFSET 0 

编辑:因此问题最终出现在will_paginate gem中,因为它在查询上调用count来知道条目的总数,因此它可以获得准确的页数。 但是,will_paginate确实为paginate方法提供了一个选项,它允许您传入一个自定义的total_entries计数,如果您有一个海量表并且不关心为每个匹配查询的记录获取精确的页数,这将非常有用。

您可以像这样传递选项:

 Model.paginate(:page => params[:page], :per_page => 30, :total_entries => 100) 

您担心执行COUNT查询,但是您通过执行Model.all从数据库中选择所有记录? 你现在开玩笑吗? 您还需要提供代码才能获得帮助。 我们无法理解你的想法,我们无法弥补你可能拥有的代码。 特别是当你说“我的实际代码比上面更复杂”时。 不要试图简化问题或隐藏您认为无关的代码。

你的代码是什么样的? 您的日志是什么样的,特别是查询时间和总页面时间(呈现和ActiveRecord拆分)。 您需要提供更多信息。