【发布时间】:2013-04-26 19:52:55
【问题描述】:
我正在执行以下查询:
TaskCheck.find_by_sql ["SELECT task_checks.*, tasks.* FROM task_checks INNER JOIN tasks ON task_checks.task_id = tasks.id"]
它返回 TaskCheck 对象,但是当我尝试读取任务字段(加入查询)时,ActiveRecord 会为每个对象执行单独的选择查询。即使我加入它,它也会延迟加载我的协会。我该如何解决?
PS:我想使用纯 SQL。原因是因为 AR“包含”方法为关联执行了第二个 SELECT,这对于一对一关联来说是无效的,我希望获得尽可能好的性能。
【问题讨论】:
-
如果您不使用纯 SQL,这非常简单。为什么要用纯sql?
-
因为这部分系统每天要执行数千次,我希望尽可能获得最佳性能。
-
我现在记得了,主要原因是因为 AR “includes” 方法为关联做了一个单独的 SELECT。这对于 Rails 和一对多关联来说是一种很好的方法,但在一对一关联中无效。
标签: sql ruby-on-rails activerecord eager-loading model-associations