3 つのモデルがあるとします。
class Collection < ActiveRecord::Base
has_many :comments, through => :users
end
class User < ActiveRecord::Base
belongs_to :collection
has_many :comments
end
class Comment < ActiveRecord::Base
belongs_to :user
end
次のようなインデックスを使用します。
add_index :users, :collection_id
add_index :comments, :user_id
コメントのコレクション クエリがある場合:
@collection.comments
両方のインデックスを使用しますか?
編集:
これにより、次のようなクエリが生成されます。
SELECT "comments".* FROM "comments" INNER JOIN "users" ON "comments"."user_id" = "users"."id" WHERE "users"."collection_id" = 232
EXPLAINを使用すると、「ユーザーのindex_users_on_collection_idを使用したインデックススキャン」のみを使用していると主張します
おそらく、collection_id のユーザーのインデックスからユーザーをすばやく取得しますが、ユーザーと参加するときにすべてのコメントを検索しますか? コメントが多い場合 (仮説的には 100,000 など)、このクエリはうまく機能しませんか?
ありがとうございました。