【问题标题】:What's more optimal: query chaining parent & child or selecting from parent's child objects什么更优化:查询链接父子对象或从父子对象中选择
【发布时间】:2015-07-27 04:50:28
【问题描述】:

很好奇其中哪一个性能更好。如果您有一个拥有多个 PlanDates 的用户,并且您知道您的用户是变量 current_user 中 id 为 60 的用户,这样做是否更好:

plan_dates = current_user.plan_dates.select { |pd| pd.attribute == test }

OR

plan_dates = PlanDate.joins(:user).where("plan_dates.attribute" => test).where("users.id" => 60)

问是因为我一直在阅读有关使用 select 的危险,因为它构建了整个对象......

【问题讨论】:

标签: sql ruby-on-rails ruby-on-rails-4 activerecord


【解决方案1】:

select 不鼓励使用,因为与 ActiveRelation 方法 wherejoins 等不同,它是来自 Enumerable 的 Ruby 方法,这意味着必须加载 整个 user.plan_dates 关系在选择开始之前进入内存。这在小范围内可能没有什么不同,但如果一个普通用户有 3,000 个计划日期,那么你就有麻烦了!

因此,您的第二个选项(仅使用一个 SQL 查询来获取结果)是更好的选择。不过,你也可以这样写:

user.plan_dates.where(attribute: test)

这仍然只是一个 SQL 查询,但利用 ActiveRelation 的强大功能获得更具表现力的结果。

【讨论】:

    【解决方案2】:

    第二个。 select 必须在代码级别比较对象,第二个只是查询。

    另外,除非使用变量,否则第二个表达式可能不会实际执行,而第一个表达式将始终执行。

    【讨论】:

      猜你喜欢
      • 2016-12-04
      • 1970-01-01
      • 1970-01-01
      • 2014-02-25
      • 1970-01-01
      • 2017-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多