データベースに関して初学者のため、意味不明な点があればご指摘をお願いいたします。
開発しているシステムにて以下のような構造が存在します(例のためモデル名は変えています)。
モデル
Player: 人のデータ Rank: Playerのレベルを表すマスタデータのテーブル、R1~R5まであり、その説明なども記録されている PlayerRank: PlayerとRankの関連を表すモデル (PlayerのRankは、実務上最初に与えられたランクから変更されることはほぼありません。)
という内容で、
Player has_one PlayerRank PlayerRank belongs_to Player PlayerRank belongs_to Rank
というアソシエーションがあります(わかりづらかったらすみません、、)。
ここで、Player一覧において、Player.all
をR1R5で並び替えが行われる機能を実装したいと考えています。R5はRankのカラムであるため、
しかしながら、R1
Ruby
1Player.preload(:player_rank)
のようにしなければ、Player.all
を並び替えできないと思います(内部的には、テーブルを結合しているということですよね?)。
このpreloadのクエリが、結果をキャッシュしているようですがPlayer
の件数が多いため非常に時間がかかり、現実的に並び替えの機能を実装できない状態になっています(Player一件ずつに対してキャッシュの処理が走る?)。
以上に関して、どのようなアプローチを取れば良いかご教授願えないでしょうか。
おそらく色々間違っていると思うのですが、設計の間違いか、クエリのとりかたの間違いなのか、包括的にご指摘願えれば幸いです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/01 08:31
2017/11/01 08:40