Laravel 查询效率差异

Posted

技术标签:

【中文标题】Laravel 查询效率差异【英文标题】:Laravel Query efficiency difference 【发布时间】:2022-01-09 14:34:21 【问题描述】:

请有人告诉我在 Laravel 中哪一个是最有效的选择:

    $car = Car::all(); ------- $car = Car::find(); $car = DB::table('car')->get(); ------ $car = DB::table('car')->first();

【问题讨论】:

如果你需要Car模型,最好使用Eloquent(第一种方法)。如果您需要一个大数据集,querybuilder DB 可能会更快。所以在大多数情况下,我会使用方法 1 【参考方案1】:

您的第一种方法:

$car = Car::all();   ------- $car = Car::find();

使用 Eloquent。这意味着,从查询中接收到的所有行都将被合并到模型实例中,并且所有这些都将被注入到Collection 的实例中(当然,对于多个元素)。这很有用,因为您将拥有这带来的所有好处。但是,这会导致性能略有下降(可以理解)

你的第二个:

$car = DB::table('car')->get(); ------ $car = DB::table('car')->first();

改为使用查询生成器。结果(作为一个整体)也将被转换为Collection 的实例,但它的项目将是简单的数组。这意味着该过程将更快(更高性能),但不利于不具备 Eloquent 的所有酷特性。

还有一个性能更高的选项:使用原始查询。这也需要权衡:结果不会被合并到 Collection 实例中。

使用哪一个?这取决于您的需求。通常我会选择 Eloquent 选项。当我需要对大型数据库进行查询并且需要速度时,我会直接使用查询生成器。

【讨论】:

哦坦克兄弟。好答案 顺便说一句,查询生成器返回 stdClass 对象而不是数组【参考方案2】:

对我来说,最有效的方法是从模型中进行选择:例如 Car:all(),但使用分页或不使用 all() 方法从数据库中获取所有记录总是更好。

但是使用DB 选择会更快一些,在某些情况下使用起来可能会更好。

最终,这始终取决于您的问题是什么以及您想通过哪种方式解决它。

为了更好地理解,我建议您观看此视频,之后可能会继续搜索更多信息或自己尝试一下。

https://www.youtube.com/watch?v=uVsY_OXRq5o&t=205s

【讨论】:

哦坦克兄弟。

以上是关于Laravel 查询效率差异的主要内容,如果未能解决你的问题,请参考以下文章

天数差异(月/年) - Laravel

Laravel 会话与原生 PHP 会话性能差异

Laravel查询范围具有动态值

Laravel 验证更新和保存的差异

laravel-model实现复杂的查询语句

laravel-model实现复杂的查询语句