什么更优化:查询链接父母&孩子或从父母的儿童对象中选择

时间:2015-07-27 04:50:29

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

好奇哪些是更好的表现。如果您的用户拥有多个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的危险,因为它构建了整个对象......

2 个答案:

答案 0 :(得分:4)

不建议使用

,因为与ActiveRelation方法selectwhere等不同,它是来自Enumerable的Ruby方法,意味着整个 {在选择开始之前,必须将{1}}关系加载到内存中。这可能不会在小规模上产生影响,但如果普通用户有3,000个计划日期,那么你就麻烦了!

所以,你的第二个选项,只使用一个SQL查询来获得结果,是更好的选择。但是,您也可以这样写:

joins

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

答案 1 :(得分:1)

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

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