如何用更少的sql加速?

时间:2013-08-29 09:59:21

标签: ruby-on-rails ruby-on-rails-3

这是我获取整数计数和@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)

1 个答案:

答案 0 :(得分:0)

您是否正在尝试使SQL查询本身更快,或者只是降低复杂性并不完全清楚。无论你做什么,你仍然需要至少进行两次查询。一个获得总计数,一个获得10个代码。没有办法解决这个问题。在你的第二个例子中,它减少了重复的代码,但它仍然会与你的第一个例子进行完全相同的查询。

在您的第三个示例中,如果您以后实际使用它们,我建议您只需加载相关模型。否则,你只是在增加不需要的开销。

如果您正在尝试加快速度,请确保为任何用于排序或排序的列都准备好数据库索引。