【问题标题】:Discussion: Laravel Eloquent vs DB queries for appends讨论:Laravel Eloquent vs DB 查询追加
【发布时间】:2021-05-19 18:42:25
【问题描述】:

我有一个用例,其中我有一些模型(超过 20 个),其中一个模型与其他 15 个模型有关系,还有一些特征中有一些附加。

我想就这些查询应该如何运行获得意见:

对产品表中的一些字段求和:

我应该使用这个语法吗:

$this->products()->sum('someField')

或者我应该使用:

DB::table('products')->sum('someField')

可能是一样的,但我不太确定,我之所以这么问,是因为性能非常重要,并且每毫秒保存都会受到赞赏。谢谢

【问题讨论】:

    标签: mysql database laravel eloquent lumen


    【解决方案1】:

    大概用DB::table()

    Eloquent 和任何其他 ORM 的经验法则是,在创建和“水合”对象时会产生大量开销,如果有相关表中的对象被查询和创建,则更糟。如果你需要做的只是得到一个总和,那么你就可以避免 ORM 的开销。

    话虽如此,在这种情况下生成总和的代码应该是相似的,如果不是微优化的话,因为您使用的是模型类,所以您没有水合一个对象或对象集合。

    您始终可以使用您的系统/数据对这两种不同的方法进行基准测试。无论采用哪种方式,sum 都是一个 SQL 聚合,它将生成相似或完全相同的 SQL,并返回一个数字而不是一个对象,其中 ORM 可能会查询有关水合和相关对象集合的填充的问题。

    【讨论】:

      【解决方案2】:

      就大数据而言,查询构建器在性能方面更快更好,但如果您只对一条记录或几条记录感兴趣,则最好使用 eloquent。

      如果您正在寻找更好的关系,Eloquent 比查询构建器更好。

      在你的情况下,你对速度更感兴趣,你最好的选择是查询生成器

      DB::table('products')->sum('someField')
      

      【讨论】:

        猜你喜欢
        • 2016-08-28
        • 1970-01-01
        • 2016-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-07
        • 2017-10-22
        • 2015-02-22
        相关资源
        最近更新 更多