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 查询效率差异的主要内容,如果未能解决你的问题,请参考以下文章