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