【问题标题】:Which of the following is most efficient one and why?以下哪一项是最有效的,为什么?
【发布时间】:2018-03-14 18:07:10
【问题描述】:

以下是从订单表中检索所有订单行的查询

 $orders = auth()->user()->orders;

 $orders = Order::where('user_id',auth()->id())->get();

 $orders = \DB::table('orders')->where('user_id',Auth::id())->get();

如果订购表 100 000 行,那么上述哪种方法最适合使用?

【问题讨论】:

  • 前两个应该(在我看来)在幕后执行基本相同的事情。第三个将跳过将结果转换为 Eloquent 模型,这将稍微提高性能,但也会降低 $orders 结果的可用性。我会使用 #1,因为它是最干净的代码,除非您先进行了一百个更好的优化,否则您很可能不需要仔细优化它。
  • 好的,谢谢
  • @Abhilash.k.p 你是在模型还是控制器中写这个查询
  • 在控制器@karthik

标签: laravel performance laravel-5.5 php-7.1 memory-efficient


【解决方案1】:

实际上在 Laravel 中你可以使用 toSql 方法来比较查询,看看哪一个是最优化的查询,如下所示:

$sql=auth()->user()->orders()->toSql();

但在上面的例子中,我们通常看到它们都是相同的:

//First
"select * from `orders` where `orders`.`user_id` = ? and `orders`.`user_id` is not null"

//Second
"select * from `orders` where `user_id` = ?"

//Third
"select * from `orders` where `user_id` = ?"

如你所见,第二个和第三个完全一样,但第一个有一个额外的 and 语句,它更可靠,所以我认为执行时间没有不同,你会最好使用第一个。

【讨论】:

    【解决方案2】:

    相比 laravel eloquent DB:: 类是从数据库中检索数据的更快方法,但在我们的例子中,我们以结构化方式管理应用程序,它取决于您的编码标准和模块管理。

    我建议使用:

    $sql=auth()->user()->orders()->toSql();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-23
      • 2020-02-04
      • 2019-07-12
      • 2019-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多