使用 Ruby on Rails 时,了解如何优化数据库查询以提高性能和用户体验非常重要。 Active Record 是 Rails 的对象关系映射 (ORM) 工具,它提供了高效查询数据库的强大功能。
查询优化是一个复杂的主题
,已有许多相关书籍。在这 垃圾邮件数据 里,我们将探讨一些技术和技巧来优化 Active Record 查询并提高应用程序的速度和响应能力。
使用选择性列提取
优化 Active Record 查询的最有效方法之一是从数据库中仅检索所需的列。通过指定我们需要的精确列,我们可以最大限度地减少数据库和 Ruby on Rails 应用程序之间传输的数据。例如,如果我们只想使用数据库名称:
# 未优化的实践:检索所有列
用户全部
# 优化实 词组匹配中的主题定位 践:选择特定列
用户.选择(:id,:name)
使用预先加载
通过提前加载相关记录,预加载有助于减少数据库查询的次数。通过前置关联,您可以避免对每个关联记录进行 N+1 查询的问题。下面是 N+1 查询问题和称为俄罗斯套娃
存的替代技术的一个例子。
# N+1 查询问题
用户=User.all
用户.each { |用户| puts user.posts.count } # 对用户执行一次查询,对帖子执行 N 次查询(N = 用户数量)
在前面的例子中,我们检索 阿拉伯联合酋长国电话号码 所有用户,然后遍历每个用户以检索与他们相关的帖子数量。这会导致执行 N 个额外的查询,从而导致性能下降。
为了解决这个问题,我们可以使用 includes 方法进行预先加载,如下所示:
预先加载解决方案
用户 = 用户.includes(:posts).all
用户.each { |用户| puts user.posts.count } # 执行两个查询:一个针对用户,一个针对帖子(无论用户数量多少)
使用 includes(:posts) 方法,加载