rails:如何防止慢速左外连接

时间:2013-11-28 18:32:19

标签: performance ruby-on-rails-4

假设您有一个包含大量联合表的数据结构。 你显然想要有效地获取它们。 所以你指定了很多includes()

这在第一种方法上运作良好: 获取基本表格, 和rails解析连接的表 通过基于ID进行查询, 获取已加入的数据(非常快速有效)

但是一旦你应用了一些where()查询或一些order(),那个方法就失败了。 然后Rails改变获取策略,使其成为一个全部大的左外连接查询。 这真的很慢。

诀窍是不要在第一个查询中使用任何includes(), 然后根据你从第一个查询获得的id重新获取, 适用所有包含的时间。

但是对于order()有一个警告: - 如果要在相关表上进行排序,则仍需要在第一个查询中包含()。 - 通过基于id的重新获取,你从第一个查询中删除了顺序,所以你需要求助你的结果(在内存中)

使用rails4和postgresql对我来说效果很好。

每个连接表应该有一个sql查询, 其中大多数是id的超快速查询。

作为额外的奖励,你可能只想在缓存块中进行第二次查询, 为了避免第二个查询,如果你已经渲染它。

0 个答案:

没有答案