2017-06-22 17 views

回答

6

N+1查询不会发生在Ecto

外生协会必须明确加载使用preload

如果您尝试访问尚未加载的关联查询,这将是Ecto.Association.NotLoaded

至于其他的查询速度慢的情况下,你可以添加自定义记录器外生:

config :my_app, MyApp.Repo, 
    adapter: Ecto.Adapters.Postgres, 
    url: {:system, "DATABASE_URL"}, 
    loggers: [{Ecto.LogEntry, :log, []}, {MyApp.CustomLogger, :log, []}] 

自定义记录器:

defmodule MyApp.CustomLogger do 
    def log(entry) do 
    if (entry.query_time > 1000_000) do 
     Logger.info("Slow!!!!: #{entry.query}") 
    end 
    end 
end 
0

我可以推荐你我自己的宝石ecto_profiler

+0

虽然此链接可以回答这个问题,最好是在这里有答案的主要部件,并提供链接以供参考。如果链接页面更改,则仅链接答案可能会失效。 - [来自评论](/ review/low-quality-posts/18634357) –

+0

@JessBowers如何包含大而厚的宝石中的基本部分?神经动力学要求子弹的类比!不是代码的一部分!这是质量差和不负责任评论 –

+0

是的,我明白你的意思。但是,如果你认为这是一个糟糕的问题(一个“购物问题”,它不符合SO规则的好问题),那么就不要回答,把问题投下来。或者尝试编辑Q使其更好。我只是想帮助你使用这个网站,不想冒犯 - 而且我只有一个选民。 –