###前提・実現したいこと
現在、大量のレコードが入ったデータベースを画面に表示するWebアプリケーションを作成しています。
一度に全てのレコードを取得するのは処理時間がかかってしまうので、kaminariでpager機能を実装して表示しています。
kaminariを使用した場合、データを取得するクエリとは別に、レコード数をcountするクエリが自動で発行されるかと思いますが、データ取得自体のクエリがJoin等を行い重いクエリであるため、countに非常に時間がかかってしまっています。
このcountのSQLを流さないようにする方法、あるいは処理を高速にする方法を教えていただきたいです。
(現象としては、下記サイトと同じ現象です。
http://h3poteto.hatenablog.com/entry/2015/12/20/210248)
###該当のソースコード
現在は以下のような実装になっており、時間のかかるクエリが2回走っています。
controller @displaydata = model.page(params[:page]).join().join().where().where.... end
発行されるSQL1→ select * from table1 join table2 on table1.key = table2.key.....
発行されるSQL2→ select count(*) from table1 join table2 on table1.key = table2.key.....
これを、以下のような方法で、時間のかかるクエリを走らないようにしたいです。
controller @displaydata = model.join().join().where().where.... //どのように実装するのかはわかりませんが、一度目のSQLで取得したmodelのカウントをつかって、pagerを表示させたいです @pager = displaydata.count end
ざっくりとした質問でもうしわけありませんが、どうぞよろしくお願いいたします。
###補足情報(言語/FW/ツール等のバージョンなど)
rails 5
postgresql
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/10 12:48