1

我有用户表和民意调查表。假设表很大,那么在 Rails 中哪个查询会更有效:

User.find(user_id).polls.where('category = ?',category)
Poll.where('user_id = ? AND category = ?',user_id,category)

你可以假设一个用户不能有太多的投票(平均可能有 100 个投票)。并且 user_id 和 category 都被索引了

4

1 回答 1

1

第一个等价于:

user  = User.find(user_id)
polls = user.polls.where(:category => category)

遗嘱User.find发出

select * from users where id = ?

然后该user.polls.where(...)部分将执行以下操作:

select * from polls where user_id = ? and category = ?

奇怪的是,这正是平原Poll.where(...)会做的事情。

所以第二个应该更快,因为它不执行select ... from users. OTOH,如果您已经拥有用户,那么user.polls.where(...)可能会更有意义。

于 2013-04-14T04:23:38.767 回答