在Rails应用程序中减少数据库查询的技术

aar*_*ell 13 database optimization database-design ruby-on-rails query-optimization

如果您的Rail应用程序具有许多复杂的关联模型,您使用哪些技术来减少数据库查询?

事实上,我会进一步扩展这个问题,然后问一下,对于任何页面,你认为"太多"的查询是什么?

我有一个页面,我希望每页加载大约20次点击数据库.这是关注但不知道它是否应该关注我,或者我能做些什么来减轻负荷?

Jon*_*han 14

退房: 子弹

它是识别n + 1个查询的好方法,它提供了最小化查询的建议.

它确实会降低开发模式的速度,因此请确保在不进行性能调整时将其禁用.

虽然我们在这里,但也结帐:rails_indexes

一种简单的方法来确定您的应用可能缺少哪些索引.

快乐的调整.


Dav*_*ims 11

一种常见的做法是明智地使用include =>:association选项.

例如,您可以在控制器上执行以下操作:

def show
    @items = Item.find(:all) 
end
Run Code Online (Sandbox Code Playgroud)

...并且展示视图会执行以下操作:

<% @items.each |item| %>
    <%= item.product.title %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

这将为每次产品调用创建一个查询.但是,如果您声明包含如下关联,则会在一个查询中获得急切加载的关联:

def show
    @items = Item.find(:all, :include => :product)
end
Run Code Online (Sandbox Code Playgroud)

与往常一样,检查控制台的查询时间等.