##疑問
1.@hoge = Model.order("fuga DESC").take(5)
で発行されるSELECT "models".* FROM "models" ORDER BY fuga DESC LIMIT ? [["LIMIT", 5]]
をした時レコード数が莫大な場合の負荷は大きいのか?(5つ取り出しているだけだから特に負荷はないのか?)
2.負荷がかなり大きいのならば、ランキングのようにある属性の上位5つを取ってくる最適なクエリはどのように書けばよいのか?
##考え流れ
@hoge = Model.order("fuga DESC").take(5)
のようにactive_recordで指定してモデルを並べ替えてそのうちの5つをとってくるという文を書きました。そのため
SELECT "models".* FROM "models" ORDER BY fuga DESC LIMIT ? [["LIMIT", 5]]
のようなSQL文が発行されるかと思います。
これは、一度modelテーブルのレコードをすべて参照して
並び替えてそのうちの5個をとってきているとおもっています。
SQL自体は1文で簡単なものかと思うのですが、レコード数が10万など(とっても多く)なった場合レコードをすべて参照して
の部分でかなりの負荷がでてしまうのでは?と思いました。
しかし何かの項目上位5つを取り出す時、この負荷は避けられないきがしてしまいます。
実行環境はrailsです。
お時間あるときにでもよろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/12 06:57