我有用户表和民意调查表。假设表非常大,哪些查询在Rails中更有效:
User.find(user_id).polls.where('category = ?',category)
Poll.where('user_id = ? AND category = ?',user_id,category)
您可能认为用户不能进行太多民意调查(平均可能有100次民意调查)。而user_id和category都被编入索引
答案 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(...)
可能会更有意义。