应该没有这么大差异的,是不是本身数据量比较大,第一个查询之后有数据库cache,导致第二次比较快。你可以换个查询顺序看看。
查询的时候加上limit看看。
查询一:
$questions = Question::query()->get();
查询二:
$questions = DB::select("select * from `questions` where `questions`.`deleted_at` is null");
return $this->apiSuccess([
'questions' => $questions,
]);
protected function apiSuccess($data = array(), $message = 'success')
{
$result = array(
'code' => 200,
'message' => $message,
'data' => $data
);
return response()->json($result);
}
tipask二次开发时,发现的问题:
查询一和查询二,到mysql时的sql是一致的,但是本地的响应速度不在一个量级,
查询一要6秒多,查询二只有500ms左右,
检查后发现,查询一在查询数据库和查询二是差不多的400ms,但是到了apiSuccess方法后,变成6s,
可能是collection对象转array时,转化慢的问题
请问大佬,查询一这种应该怎么优化,还有laravel什么时候用原生SQL会比较好,集合对象又比较容易操作数组,
所以望大佬指点指点,谢谢啦~
两个查询,我都用DB::connection()->enableQueryLog();dd(DB::getQueryLog());打印过数据了,响应的时间差不多,就是collection转array的时候,查询一的速度才慢下来。数据量并不大,300条问题数据以内