ruby-on-rails - Rails where 或 select 用于查询链接

标签 ruby-on-rails activerecord

所以在查询数据库时,我知道最好使用 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/

相关文章:

python - SQLAlchemy - 模型 - 使用动态字段 - ActiveRecord

ruby-on-rails - Rails 有许多动态条件子句

ruby-on-rails - 如何在 Doorkeeper::TokenController 上使用 before_action

ruby-on-rails - 在 Rails 中同时发出 http 请求

ruby-on-rails - FactoryGirl 错误:未初始化常量 Post::user

ruby-on-rails - Rails ActiveRecord 助手查找方法不急于加载关联

ruby-on-rails - 如何在 app/assets/* 文件中访问 Controller 的变量

ruby-on-rails - 如何从 html.erb 调用 JavaScript 函数

ruby-on-rails - Ruby on Rails事件记录选择始终返回ID

sql - 使用 pgsql/activerecord 进行队列分析