假设您有三个模型:
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 条),这个查询会不会执行得很好?
谢谢你。