就性能而言,Gorm Preload功能是否是一种好的做法?

时间:2019-12-11 01:54:48

标签: go eager-loading go-gorm

为什么Gorm中的Preload函数是“好的做法”,因为每次调用它时都会检索给定表的所有记录(急切加载)?

我看到很多人在处理关系时都将“预加载”作为一种很好的解决方案,但我不明白为什么。

1 个答案:

答案 0 :(得分:2)

我不知道你在说什么;

但一般而言;联接/查找的计算成本是不同的。

给出了两个表:kake和topping:

kake(名称为str) 打顶(名称为str)

如果您加入,与比赛时相比,您的集合(磁盘输入-输出,内存)要大得多;

因为您需要计算所有置换。

表快照

蛋糕:

1|napoleon
2|chocolate
3|cheese

摘心:

1|butter
2|frosting
3|cacao
4|white cacao
5|goat chese
6|cow chese
7|chinese chese
...|nuts
...|avocado
...|white chocolate
11:cherry-flavor

查询逻辑

使用普通联接,您将获得3 x 11的结果-所有蛋糕乘以所有浇头。

这看似微不足道,但当表中有1000多个记录时却并非如此。

具有“预加载”功能;

get all topings for napoleon => only frosting
get all topings for chocolate  => only cacao
get all toppings for cheese => only cow chese and only chinise chese

然后;给我拿破仑+巧克力+奶酪,

您可以避免:黄油,樱桃味

所以您只选择相关的记录。

这并不简单。 它会引起其他问题。 但通常来说,如果您可以说:

我需要所有x,y,z,而不需要a,b,c。

我希望这是有道理的。