Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 回购预加载中的订单依据_Elixir_Ecto - Fatal编程技术网

Elixir 回购预加载中的订单依据

Elixir 回购预加载中的订单依据,elixir,ecto,Elixir,Ecto,我想了解在Repo.preload所做的查询中,为什么会有orderby子句 App.Repo.get(Sopitas.Continent, 1) |> App.Repo.preload(:countries) 执行的查询包括: [debug] QUERY OK source="continents" db=0.4ms SELECT c0.`id`, c0.`name`, c0.`sm_id`, c0.`inserted_at`, c0.`updated_at` FROM `cont

我想了解在
Repo.preload
所做的查询中,为什么会有
orderby
子句

App.Repo.get(Sopitas.Continent, 1) |> App.Repo.preload(:countries)
执行的查询包括:

[debug] QUERY OK source="continents" db=0.4ms
SELECT c0.`id`, c0.`name`, c0.`sm_id`, c0.`inserted_at`, c0.`updated_at`
  FROM `continents` AS c0 WHERE (c0.`id` = ?) [1]
[debug] QUERY OK source="countries" db=3.5ms decode=1.1ms
SELECT c0.`id`, c0.`sm_id`, c0.`name`, c0.`continent_id`, c0.`inserted_at`, c0.`updated_at`, c0.`continent_id`
  FROM `countries` AS c0 WHERE (c0.`continent_id` = ?)
  ORDER BY c0.`continent_id` [1]

我想理解这一部分是因为就我所理解的
orderby
子句为查询的执行增加了处理时间。我希望避免使用

排序,这不是因为
Repo.preload
,这是因为这个
preload
查询返回许多记录

ORDER BY
子句用于在获取大量记录之前对国家(在DB引擎内)进行有效分组


我提供的链接显示了一种通用的
exto
方法:只要查询要返回许多记录,就要按键对这些记录进行排序。

在构建查询片段时,也可以使用带有预加载的SQL子句函数。例如:

alias App.Repo

Sopitas.Continent
|> Repo.get(1) 
|> Repo.preload([countries: (from c in Country, order_by: c.<your_field_goes_here>)])
alias App.Repo
欧洲大陆
|>回购获得(1)
|>回购预加载([国家:(从国家c开始,订货人:c)])

学习官方的东西真的很好;)

它真的有助于缩短执行时间吗?也许当你有很多行时,DB引擎会更好,是真的吗?当您使用条件行检索行时,我不太熟悉该过程的这一部分。因此,如果我理解正确,最好先按筛选字段对行进行排序,然后检索行。这在很大程度上取决于底层数据库引擎,但肯定不会带来任何危害。也许这就是为什么《星外》的作者们决定对所有东西都硬编码。