Laravel 以下哪项是最有效的,为什么?
以下是从orders表中检索所有订单行的查询Laravel 以下哪项是最有效的,为什么?,laravel,performance,laravel-5.5,php-7.1,memory-efficient,Laravel,Performance,Laravel 5.5,Php 7.1,Memory Efficient,以下是从orders表中检索所有订单行的查询 $orders = auth()->user()->orders; 或 $orders = Order::where('user_id',auth()->id())->get(); $orders = \DB::table('orders')->where('user_id',Auth::id())->get(); 或 $orders = Order::where('user_id',auth()-&
$orders = auth()->user()->orders;
或
$orders = Order::where('user_id',auth()->id())->get();
$orders = \DB::table('orders')->where('user_id',Auth::id())->get();
或
$orders = Order::where('user_id',auth()->id())->get();
$orders = \DB::table('orders')->where('user_id',Auth::id())->get();
如果orders table 100000行,那么上面哪种方法最适合使用?实际上,在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` = ?"
正如您所看到的,第二个和第三个是完全相同的,但是第一个有一个额外的和语句,它更可靠,所以我认为执行时间没有什么不同,您最好使用第一个。实际上,在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` = ?"
正如您所看到的,第二个和第三个是完全相同的,但是第一个有一个额外的和语句,而且它更可靠,所以我认为执行时间没有什么不同,您最好使用第一个。与laravel eloquent DB::class相比,从数据库检索数据的速度更快,但在我们的例子中,我们以结构化的方式管理应用程序,其结构取决于您的编码标准和模块管理 我建议使用:
$sql=auth()->user()->orders()->toSql();
与laravel相比,eloquent DB::class是从数据库检索数据的更快的方法,但在我们的例子中,我们以结构化的方式管理应用程序,它取决于您的编码标准和模块管理 我建议使用:
$sql=auth()->user()->orders()->toSql();
在我看来,前两个应该是在幕后执行基本相同的事情。第三种方法将跳过将结果转换为雄辩的模型,这将稍微提高性能,但也会降低
$orders
结果的可用性。我会使用#1,因为它是最干净的代码,而且很可能您不需要仔细优化它,除非您先介绍了100个更好的优化。好的,谢谢you@Abhilash.k.p您是在model还是controllerIn controller@karthikt中编写此查询前两个应该是(据我所知)在幕后执行基本相同的事情。第三种方法将跳过将结果转换为雄辩的模型,这将稍微提高性能,但也会降低$orders
结果的可用性。我会使用#1,因为它是最干净的代码,而且很可能您不需要仔细优化它,除非您先介绍了100个更好的优化。好的,谢谢you@Abhilash.k.p您是在model还是controllerIn controller@karthik中编写此查询