2017-06-22 18 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使其更好。我只是想幫助你使用這個網站,不想冒犯 - 而且我只有一個選民。 –