因此,在查询数据库时,我知道在初始查询中使用where
会更好:
pending = Request.where("status = ?", "Pending").order! 'created_at DESC'
但是,如果我需要进一步过滤此信息,我可以使用where
或select
执行此操作:
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
在整个数据库没有被搜索时有用例吗?
答案 0 :(得分:5)
where
要好得多。 where
修改SQL,以便DB执行识别要检索的记录的“繁重工作”。
select
检索满足初始where
条件的所有记录,将它们转换为数组,并使用`Array#select',以便在rails端进行选择,并且您已检索到更多数据库中的记录超出了您的需要,并且进行了比必要更多的处理。
选择确实具有优势,因为您可以根据可能不是简单地从表列中提取的模型方法进行选择。例如,您可能有一个模型方法#bad_credit?
,该方法由信用额度,未付发票的年龄和帐户类型决定。