LOADING

子查询和join哪个快?Laravel到底用不用orm

用的两张表关联主表 49609 副表 数据35352
首先是子查询的代码 用的laravel自带orm

$student = Student::doesntHave('hasBanjiStudents')->get();
//变成mysql语句是
select * from `tbl_students` where not exists (select * from `tbl_banji_students` where `tbl_students`.`id` = `tbl_banji_students`.`student_id`) and `tbl_students`.`deleted_at` is null
//耗时时间 0.270s

接下来有请join闪亮登场

 $student = Student::leftJoin('banji_students','students.id','=','banji_students.student_id')
                ->select('students.*','banji_students.banji_id')
                ->where('banji_students.banji_id',null)
                ->get();
//变成sql语句是
select `tbl_students`.*, `tbl_banji_students`.`banji_id` from `tbl_students` left join `tbl_banji_students` on `tbl_students`.`id` = `tbl_banji_students`.`student_id` where `tbl_banji_students`.`banji_id` is null and `tbl_students`.`deleted_at` is null
//耗时0.169s

上网查了一下, laravelorm基本都基于子查询, 而子查询在使用中会建立一张临时表进行数据排序等,而join则不会,所以子查询又慢又占用内存

标签: Laravel

添加新评论