我有一个查询,大致如下(在song.rb中):
def self.new_songs
Song.where(id: Song.grouped_order_published).select_important_stuff
end
在我的应用程序中,稍后在控制器中传递了限制和偏移量:
@songs = Song.new_songs.limit(10).offset(10)
我的应用程序结构需要保持这种设置方式,但不幸的是,它非常缓慢,因为它限制了外部查询而不是子查询。是否有一种方法可以公开子查询,使其接收限制和偏移量,而不是外部查询?
编辑:我应该补充说明我正在使用postgres 9.2。
编辑2:我希望以这种方式进行分页,并且需要获取总行数的“计数”。因此,我会像这样做:
@songs = Song.new_songs
...
@pages = @songs.count / 10
...
render @songs.limit(params[:page]).offset(0)
如果我想要对它进行修改,我必须完全重新做一遍(这在很多地方都是如此)。如果不限制它直到实际调用,我可以在中间进行计数,然后最终只获取页面。我想我更需要的是有关如何使用内部查询完成此操作的建议,而不会随着数据库增长变得非常缓慢。