【问题标题】:query time in RailsRails 中的查询时间
【发布时间】:2013-04-14 03:50:48
【问题描述】:
我有 users 表和 polls 表。假设表很大,在 Rails 中哪个查询更有效:
User.find(user_id).polls.where('category = ?',category)
Poll.where('user_id = ? AND category = ?',user_id,category)
您可以假设用户不能有太多的投票(平均可能有 100 次投票)。并且 user_id 和 category 都被索引了
【问题讨论】:
标签:
ruby-on-rails
database
ruby-on-rails-3
rails-activerecord
【解决方案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(...) 可能更有意义。