0

这就是我获得整数和@codes对象的方式

@codes = user.codes.joins(:community).merge(Community.not_deleted).order("codes.updated_at DESC").limit(10)
@codes_count = user.codes.joins(:community).merge(Community.not_deleted).order("codes.updated_at DESC").count

有什么技术可以减少 sql 查询吗?

就像是

@codes_all = user.codes.joins(:community).merge(Community.not_deleted).order("codes.updated_at DESC")

@codes_count = @codes_all.count
@codes = @codes_all.limit(10)

是否有可能使这种急切的加载像这样?

@codes_all = user.codes.includes(community: [:country, :language]).joins(:community).merge(Community.not_deleted).order("codes.updated_at DESC")

@codes_count = @codes_all.count
@codes = @codes_all.limit(10)
4

1 回答 1

0

目前尚不清楚您是要使 SQL 查询本身更快,还是只是降低复杂性。无论您做什么,您仍然必须至少进行两次查询。一个获得总数,一个获得 10 个代码。没有办法解决这个问题。在您的第二个示例中,它减少了重复代码,但仍将进行与您的第一个示例完全相同的查询。

在您的第三个示例中,我只建议您稍后实际使用相关模型时急切加载它们。否则,您只会增加不需要的开销。

如果您想加快速度,请确保您为用于排序或排序的任何列设置了数据库索引。

于 2013-08-29T11:03:16.240 回答