在Rails中查询时间

时间:2013-04-14 03:50:48

标签: ruby-on-rails database ruby-on-rails-3 rails-activerecord

我有用户表和民意调查表。假设表非常大,哪些查询在Rails中更有效:

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

您可能认为用户不能进行太多民意调查(平均可能有100次民意调查)。而user_id和category都被编入索引

1 个答案:

答案 0 :(得分: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(...)可能会更有意义。