(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)
私のアプリの構造は、この設定方法を維持したいのですが、残念ながら、サブクエリではなく外部クエリを制限しているため、非常に低速です。
外部クエリではなく制限とオフセットを受け取るようにサブクエリを公開する方法はありますか?
編集:postgres9.2を使用していることを追加する必要があります。
編集2:この方法で実行したい理由は、ページネーションを実行していて、行の総数の「カウント」を取得する必要があるためです。だから私はこのようなことをします:
@songs = Song.new_songs
...
@pages = @songs.count / 10
...
render @songs.limit(params[:page]).offset(0)
どういうわけかそれを変更した場合、これを完全にやり直す必要があります(これはたくさんの場所にあります)。実際に呼び出されるまで制限しないことで、その間のカウントを実行し、最後のページだけを取得できます。データベースが大きくなるにつれてひどく遅くなることなく、これを内部クエリで実行する方法についてのアドバイスをもっと探していると思います。