因此,在查询数据库时,我知道在初始查询上使用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有没有用例?
发布于 2017-02-25 06:43:05
从性能的角度来看,where要好得多。where修改了SQL,以便DB执行标识要检索的记录的“繁重任务”。
select检索满足初始where条件的所有记录,将它们转换为数组,并使用`Array#select‘,因此选择发生在rails端,您从数据库中检索到的记录比所需的多,并且做了比所需的更多的处理。
Select确实有一个优势,那就是您可以基于可能不是简单地从表列中提取的模型方法进行选择。例如,您可能有一个模型方法#bad_credit?,它由信用额度、未付发票的年龄和帐户类型确定。
https://stackoverflow.com/questions/42448821
复制相似问题