Rails在哪里或选择查询链

时间:2017-02-24 21:44:29

标签: ruby-on-rails activerecord

因此,在查询数据库时,我知道在初始查询中使用where会更好:

pending = Request.where("status = ?", "Pending").order! 'created_at DESC'

但是,如果我需要进一步过滤此信息,我可以使用whereselect执行此操作:

high_p = pending.where("priority = ?", "High Priority")
normal_p = pending.where("priority = ?", "Priority")

或者

high_p = pending.select{|x| x.priority == "High Priority"}
normal_p = pending.select{|x| x.priority == "Priority"}

我的问题是,从绩效的角度来看哪一项更好?我们应该始终使用where吗?或者select在整个数据库没有被搜索时有用例吗?

1 个答案:

答案 0 :(得分:5)

从绩效的角度来看,

where要好得多。 where修改SQL,以便DB执行识别要检索的记录的“繁重工作”。

select检索满足初始where条件的所有记录,将它们转换为数组,并使用`Array#select',以便在rails端进行选择,并且您已检索到更多数据库中的记录超出了您的需要,并且进行了比必要更多的处理。

选择确实具有优势,因为您可以根据可能不是简单地从表列中提取的模型方法进行选择。例如,您可能有一个模型方法#bad_credit?,该方法由信用额度,未付发票的年龄和帐户类型决定。