collection转换成array慢

查询一:

$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会比较好,集合对象又比较容易操作数组,

所以望大佬指点指点,谢谢啦~

请先 登录 后评论

2 个回答

RYAN ZOLDYCK

两个查询,我都用DB::connection()->enableQueryLog();dd(DB::getQueryLog());打印过数据了,响应的时间差不多,就是collection转array的时候,查询一的速度才慢下来。数据量并不大,300条问题数据以内

请先 登录 后评论
宋登峰 - 官方技术支持
擅长:tipask,php,服务器,网站建设

应该没有这么大差异的,是不是本身数据量比较大,第一个查询之后有数据库cache,导致第二次比较快。你可以换个查询顺序看看。

查询的时候加上limit看看。

请先 登录 后评论