1

これがモデル/データベースセクションだけでなくパフォーマンスセクションにも当てはまるかどうかわからないので、ここに行きます....

3つのモデルがあるとしましょう:

Movie {
has_one :interest, :as => :resource
}
Song {
has_one :interest, :as => :resource
}
Story {
has_one :interest, :as => :resource
}

と ...

Interest {
belongs_to :resource, :polymorphic => true
}

ここで、すべての映画のすべての興味のリストが必要で、それらの Movies オブジェクトが作成された日付 (それらが何歳か) も表示したい場合は、resource_type 属性のルックアップを使用し、次に @some_interest.resource を使用します。 .created_at.

これの問題は、100 件の映画に興味がある場合、101 件のクエリが返されることです。だから線形劣化。クエリ呼び出しで :include => [:resource] を使用しようとしましたが、ポリモーフィック アソシエーションで include を使用できないと表示されます。

この深刻な劣化を回避するために、この問題を積極的にロードまたは最適化するにはどうすればよいですか??

どんな助けでも大歓迎です!!

4

1 に答える 1

0

searchlogicを使用している場合は、多態的な関係を処理するための特別な構文が役立つ場合があります。has関連するクラスの名前に を付けて指定すると、関係側で検索できますtype

たとえば、モデルが与えられた場合、過去 90 日間に作成されたムービーを取得するには、次のようなことができるはずです。

Interest.resource_movie_type_created_at_gt(Time.now-90.days)

Searchlogic は、関連するモデルに結合を設定します。これにより、パフォーマンスの問題が緩和されます。

もちろん、find_by_sqlメソッドを使用していつでも独自の SQL を作成できます。

PS。非常に役立つトリックの 1 つは、Rails コンソールで検索を書きながらログ記録をオンにすることです。これにより、ログを掘り下げなくても、生成された SQL をコンソールで確認できます。

于 2010-07-15T00:11:04.620 に答える