所以在查询数据库时,我知道最好使用 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
没有搜索整个数据库时有用例吗?
最佳答案
where
从性能的角度来看要好得多。 where
修改 SQL,以便数据库执行识别要检索的记录的“繁重工作”。select
检索满足初始 where
的所有记录条件,将它们转换为数组,并使用“Array#select”,因此选择发生在 rails 端,并且您从数据库中检索到的记录比您需要的多,并完成了比必要的更多的处理。
Select 确实有一个优势,您可以根据模型方法进行选择,而这些方法可能不是简单地从表列中提取的。例如,您可能有一个模型方法 #bad_credit?
例如,这取决于信用额度、未付发票的期限和帐户类型。
关于ruby-on-rails - Rails where 或 select 用于查询链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42448821/