Rails 3 アプリに SQL クエリがあります。
@followers
に続くユーザーの ID の配列を返しますcurrent_user
。
@followers = current_user.following
@feed_items = Micropost.where("belongs_to_id IN (?)", @followers)
このクエリを実行するより効率的な方法はありますか?
Rails 3 アプリに SQL クエリがあります。
@followers
に続くユーザーの ID の配列を返しますcurrent_user
。
@followers = current_user.following
@feed_items = Micropost.where("belongs_to_id IN (?)", @followers)
このクエリを実行するより効率的な方法はありますか?
あなたが持っているクエリは、これ以上最適化することはできません。インデックスを追加することで高速化できますがbelongs_to_id
(外部キーに対してはほとんど常にそうする必要があります)、実際のクエリは変わりません。
IN
ただし、クエリを作成するためのよりクリーンな方法があります。
Micropost.where(:belongs_to_id => @followers)
ここ@followers
で、 は の値の配列ですbelongs_to_id
。
私には良さそうです。
ただし、コード内の実際の最小文字数を探している場合は、次のように変更できます。
Micropost.where("belongs_to_id IN (?)", @followers)
に
Micropost.where("belongs_to_id = ?", @followers)
少し読みやすくなります。
Rails は配列を見て、IN
.
いつものように、Ruby 言語の主な目標は読みやすさであるため、改善はほとんど役に立ちません。
クエリが非効率的であるため、そのフィールドのインデックスをチェックインする必要があります。
それらは各データベースに対してもう少し具体的である傾向があります-ジェネリックSQLのみを指定しました。あなたの質問で。