【问题标题】:Is Gorm Preload function a good practice in terms of performance?就性能而言,Gorm Preload 功能是否是一个好习惯?
【发布时间】:2019-12-11 01:54:48
【问题描述】:

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

我看到很多人在处理关系时将 Preload 视为一个很好的解决方案,但我不明白为什么。

【问题讨论】:

    标签: go eager-loading go-gorm


    【解决方案1】:

    我不知道你在说什么;

    但一般来说;连接/与查找的计算成本不同。

    给定两个表: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。

    我希望这是有道理的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-23
      • 1970-01-01
      • 2011-03-05
      • 2017-03-22
      • 1970-01-01
      • 2016-01-03
      • 2011-02-08
      相关资源
      最近更新 更多