执行多条耗时的sql,怎么优化?

yangzc

问题描述

需要执行5条查询sql,每条sql执行时间为2s,同步的情况需要10s,有什么方案办法能优化一下吗?

随便写了一个demo

    public function test(Request $request)
    {
        $time = time();
        $sqlArr =[
            'select sleep(2);',
            'select sleep(2);',
            'select sleep(2);',
            'select sleep(2);',
            'select sleep(2);',
        ];
        foreach ($sqlArr as $sql){
            Db::select($sql);
        }
       return json(['code' => 0, 'msg' => 'ok','tt'=>time()-$time]);
    }

{
"code": 0,
"msg": "ok",
"tt": 10
}
465 3 0
3个回答

围猎三锅

协程或者异步吧

  • tanhongbin 2023-11-09

    直接放5个不同队列,直接跑就完了呗 入队可以用管道 瞬间的事

  • yangzc 2023-11-10

    怎么拿执行的结果呢

  • tanhongbin 2023-11-10

    还要结果呀? 这种协程吧

  • yangzc 2023-11-10

    用swoole的协程吗 workerman 好像没有协程

Dalong

多条一次执行。

  • 暂无评论
meows

给你两条路:

  1. 你这SQL很耗时,单独开个webman服务去处理,nginx 代理一下即可。
    具体参考:https://www.workerman.net/doc/webman/others/task.html#%E6%96%B0%E5%A2%9EHTTP%E7%AB%AF%E5%8F%A3
  2. 要不就用Swoole Hyperf 去写这个接口。
  • 暂无评论
🔝