【发布时间】:2019-12-11 01:54:48
【问题描述】:
为什么 Gorm 中的 Preload 函数是一个“好习惯”,因为它每次调用时都会检索给定表的所有记录(急切加载)?
我看到很多人在处理关系时将 Preload 视为一个很好的解决方案,但我不明白为什么。
【问题讨论】:
标签: go eager-loading go-gorm
为什么 Gorm 中的 Preload 函数是一个“好习惯”,因为它每次调用时都会检索给定表的所有记录(急切加载)?
我看到很多人在处理关系时将 Preload 视为一个很好的解决方案,但我不明白为什么。
【问题讨论】:
标签: go eager-loading go-gorm
我不知道你在说什么;
但一般来说;连接/与查找的计算成本不同。
给定两个表: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。
我希望这是有道理的。
【讨论】: