【问题标题】: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(...) 可能更有意义。

    【讨论】:

      猜你喜欢
      • 2018-10-09
      • 2016-10-28
      • 2014-07-19
      • 2019-04-24
      • 1970-01-01
      • 1970-01-01
      • 2011-07-11
      • 1970-01-01
      • 2014-01-11
      相关资源
      最近更新 更多