When debugging slow Ecto queries (I’m using postgres), because Ecto uses named prepared statements which may use a different generic query plan than when running an individual query, I don’t use Ecto’s
Repo.explain. Instead I copy the query’s SQL debug output, and from psql console I
set plan_cache_mode='force_generic_plan', create a prepared statement annotating my argument types, and execute it with
EXPLAIN (ANALYZE) EXECUTE mystatement(...).
Usually I see similar execution time as when the query is ran from Elixir. But this time the query in Elixir was running for 9s, and the psql query finished in .5s. I spent some time debugging Ecto code, and I think named prepared statements are never used with
insert_all, even when a query is passed? So in this particular case, the generic plan would be much better.
So, my question is: is there a way to run a
insert_all query with Ecto, where a named prepared statement will be used?